gpt4 book ai didi

Javascript Inheritance : One Subclass gets the Prototype, 其他没有

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:52 27 4
gpt4 key购买 nike

我有一个SuperClass“类”,这个类将被SubClassASubClassB 继承(通过原型(prototype)链)。但是,虽然继承似乎适用于 SubClassA,但它不适用于 SubClassB。代码如下:

function SuperClass(childCell){
this.childCell = childCell;
this.children = new Array(9);
for(i=0; i<9; i++) {
this.children[i] = new this.childCell();
}
}
function SubClassA(){
this.num = 1;
}
SubClassA.prototype = new SuperClass(SubClassB);
function SubClassB(){
this.num = 2;
}
SubClassB.prototype = new SuperClass(SubClassC);
function SubClassC(){
this.num = 3;
}
var x = new SubClassA();

在这段代码中,我将 x 设置为 SubClassA 的一个对象,这又会给我一个 children 属性,其中包含 9 SubClassB 对象。它正确地做到了这一点,但反过来,每个 SubClassB 对象应该包含 9 个 SubClassC 对象。然而,在检查控制台后,我发现没有一个 SubClassB 对象实际上包含 childCellchildren 属性, 应该通过原型(prototype)继承。

换句话说,x.children[0] 返回了 SubClassB {num: 2},并且没有任何其他属性。

为什么继承适用于 SubClassA 而不是 SubClassB

最佳答案

尝试像这样重新排序您的声明样本

function Parent(childCell){
this.childCell = childCell;
this.children = new Array(9);
for(var i=0; i<9; i++) {
this.children[i] = new this.childCell();
}
}
function ChildA(){
this.num = 1;
}
function ChildB(){
this.num = 2;
}
function ChildC(){
this.num = 3;
}

ChildB.prototype = new Parent(ChildC);
ChildA.prototype = new Parent(ChildB);

你的问题 - 你在向它添加原型(prototype)之前调用了 ChildB 构造函数

更新

@Bagavatu 当您创建对象时,您使用为构造函数设置的原型(prototype),然后您可以更改原型(prototype)属性,并且此更改将应用​​于具有此原型(prototype)的所有对象。
在您的情况下,您更改了对原型(prototype)的引用,因此它不适用于之前创建的对象。你可以在简单的例子中测试它

function A() {this.cell = 10}
function B() {this.num =1}

var b1 = new B(); // b1 = {num:1}

B.prototype = new A();
var b2 = new B(); // b1 = {num:1}, b2 = {num:1, cell:10}

关于Javascript Inheritance : One Subclass gets the Prototype, 其他没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20769560/

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