gpt4 book ai didi

javascript es6类原型(prototype)链修改

转载 作者:行者123 更新时间:2023-11-30 08:21:58 24 4
gpt4 key购买 nike

我正在尝试将类 C 添加到类 B 的原型(prototype)链中

class A {
constructor() {
this.a = 'a';
}
}

class B extends A {
constructor() {
super();
this.b = 'b';
}
}

class C extends A {
constructor() {
super();
this.c = 'c';
}
}

Object.setPrototypeOf(B.prototype, C.prototype);

var a = new A();
var b = new B();

console.log(b instanceof C);
console.log(b instanceof A);
console.log(b.c);

代码的问题是 B 类的构造函数中的 super() 调用不会调用 C 类的构造函数,因此属性 c 不会添加到对象中。我在这里做错了什么?

最佳答案

super 在构造函数中是基于类原型(prototype)(不是类原型(prototype)属性的原型(prototype)):

 Object.setPrototypeOf(B.prototype, C.prototype);
Object.setPrototypeOf(B, C);

这样您也可以获得适当的静态方法继承。

关于javascript es6类原型(prototype)链修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52061791/

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