换句话说,这两个不同的代码块完全相同吗?
class Child extends Parent {
// Define my subclass
}
var myInstance = new Child();
var myInstance = Object.assign(new Parent(), {
// Define my subclass
}
在我的特定用例中,我正在尝试扩展(Facebook的)Flux Dispatcher。在他们的示例中,他们使用Object.assign。我想ES6类扩展,但我担心两者之间存在微妙的差异所以我应该坚持使用Object.assign。
答案 0 :(得分:2)
不,这些代码块不等同
在类继承示例中,您将获得一个新的构造函数,该对象使对象具有父类的功能。
通过Object.assign
扩展对象是mixins的一个示例。
您只需向一个实例添加一些属性,但不会更改所有未来的子项。
与子类不同,扩展后的实例仍然会将constructor
属性指向Parent
。这意味着您无法识别非扩展中的扩展子级,因为它们都具有相同的构造函数,而运算符instanceof
将给出相同的结果。此外,您无法访问子级中被覆盖的方法,因为您将失去与其相关的链接。
对于flux的调度程序in this example,您无法通过类继承来扩展它,因为没有可以作为父级提供的构造函数。