选择
class语法后,实际上并没有出路。
问题在于ES6中的继承是通过
this使用from的返回值对关键字进行后期初始化来完成的,该返回值是from
super()的构造函数,如with
new。
.call()在当前“未初始化”的子实例上“应用”()父构造函数的旧习惯
不再起作用 。
您仍然可以做的是求助于“寄生继承”-您必须显式构造实例,对其进行扩展,然后
return再执行以下 *** 作:
function MyDerived() { var derived = new MyClass('MyDerived'); … // set up properties return derived;}
使用时
new MyClass,您将无法正确设置原型。为此,您将需要使用新的ES6
Reflect.construct函数,该函数将子类作为可选的第三个参数:
function MyDerived() { var derived = Reflect.construct(MyClass, ['MyDerived'], new.target||MyDerived); … // set up properties return derived;}
这具有额外的好处
MyDerived并不需要与所谓的
new多(只要你提供的任何
MyDerived时候
new.target为空)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)