ecmascript-6 – ES6类是否完全等同于基于Object.assign的对象扩展?

换句话说,这两个不同的代码块完全相同吗?

ES6类基于扩展

class Child extends Parent {
    // Define my subclass
}
var myInstance = new Child();

Object.assign基于

var myInstance = Object.assign(new Parent(), {
   // Define my subclass
}

在我的特定用例中,我正在尝试扩展(Facebook的)Flux Dispatcher.在他们的示例中,他们使用Object.assign.我想ES6类扩展,但我担心两者之间存在微妙的差异所以我应该坚持使用Object.assign.

最佳答案 不,这些代码块不相同

在类继承示例中,您将获得一个新的构造函数,该构造函数使对象具有父类的功能.

通过Object.assign扩展对象是mixins的一个例子.
您只需向一个实例添加一些属性,但不能更改所有未来的子项.

与子类不同,扩展后的实例仍然具有指向Parent的构造函数属性.这意味着您无法识别非扩展中的扩展子级,因为它们都具有相同的构造函数,并且操作符instanceof将给出相同的结果.此外,您无法访问子级中的重写方法,因为您将丢失指向它的链接.

对于flux的调度程序in this example,您不能通过类继承来扩展它,因为没有可以作为父项提供的构造函数.

点赞