gpt4 book ai didi

javascript - 扩展定义的类。如何调用父类(super class)的构造函数?

转载 作者:行者123 更新时间:2023-11-28 04:46:07 24 4
gpt4 key购买 nike

给定 2 个定义的类 MN,我想让 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 )

注意:我不在 construct() 中使用 N 因为我希望它即使在类未扩展时也能工作(或扩展为另一个类)。

它在我的测试中有效,但我不确定这是最好的方法。

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)

有更好、更合适的方法吗?

最佳答案

要使 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 - 如果这样在这种情况下,您可能需要考虑重构您的代码。您想要调用另一个不相关的类的构造函数似乎很不寻常。

关于javascript - 扩展定义的类。如何调用父类(super class)的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com