鉴于2个已定义的类M
和N
,我想M
扩展N
。
为此,我想使用this answer (2nd solution)中描述的setPrototypeOf()
。
Reflect.setPrototypeOf( M.prototype, N.prototype )
此外,我希望该课程M
constructor()
拨打课程N
constructor()
。
为实现这一目标,我使用以下电话:
Reflect.construct( Reflect.getPrototypeOf( M.prototype ).constructor, args, M )
注意:我不在N
中使用construct()
因为我希望它能够工作,即使这个类没有被扩展(或者扩展到另一个类)。
它适用于我的测试,但我不确定这是最好的方法。
class N {
constructor() {
console.log('N created')
}
get N() {
return 'N-prop'
}
}
class M {
constructor(...args) {
console.log('M created')
return Reflect.construct(Reflect.getPrototypeOf(M.prototype).constructor, args, M)
}
get M() {
return 'M-prop'
}
}
Reflect.setPrototypeOf(M.prototype, N.prototype)
var m = new M
console.log(m.M, m.N)
有没有更好,更合适的方法呢?
答案 0 :(得分:0)
要M
延长N
,请先使用extends
关键字。然后,要从子类调用父类,请在子组件的构造函数中使用关键字super
。
class N {
constructor() {
console.log('N created');
}
get N() {
return 'N-prop';
}
}
class M extends N {
constructor(...args) {
console.log('M created');
super();
}
get M() {
return 'M-prop';
}
}
const m = new M(); // -> M created
// -> N created
您提到即使N
未从M
继承,您也希望能够致电N
的构造函数 - 如果是这种情况,您可能想要考虑重构代码。你想要调用另一个不相关的类的构造函数似乎很不寻常。