gpt4 book ai didi

javascript - JS中的类继承和私有(private)变量

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

假设我有这段代码:

function ParentClass()
{
var anArray = [ ];

this.addToArray = function(what)
{
anArray.push(what);

console.log(anArray);
};
}

FirstSubClass.prototype = new ParentClass();
FirstSubClass.prototype.constructor = FirstSubClass;

function FirstSubClass()
{
this.addToArray('FirstSubClass');
}

SecondSubClass.prototype = new ParentClass();
SecondSubClass.prototype.constructor = SecondSubClass;

function SecondSubClass()
{
this.addToArray('SecondSubClass');
}

当我运行 new FirstSubClass() 时,我在控制台中看到一个单值数组。当我再次运行 new SecondSubClass() 时,我看到了一个单值数组。

但是,为什么当我再次运行它们时(即 new FirstSubClass(); new SecondSubClass();)然后我看到添加的数组而不是创建的新数组?

这里的基本原理是我正在创建类的实例,因此为什么它们共享相同的私有(private)属性?

我如何才能避免这种情况,例如当我这样做时,new FirstSubClass() 无论我创建该类的新实例多少次,我都会看到一个单一值数组?

最佳答案

请记住,您只为每个子类调用了 new ParentClass() 一次。这意味着私有(private)数组变量是那些子类的原型(prototype)对象的一部分。只有一个原型(prototype)对象,所以只有一个数组(每个子类)。

每次调用 new FirstSubClass() 都会生成一个共享相同原型(prototype)对象的新实例。因此,调用 addToArray() 会向创建原型(prototype)对象时创建的同一数组添加一个元素。

编辑 — 如果你想要每个实例数组,你必须做这样的事情:

function ParentClass() {
this.addToArray = function(value) { this.instanceArray.push(value); };
};

function FirstSubClass() {
this.instanceArray = [];

this.addToArray("First");
}

FirstSubClass.prototype = new ParentClass();
FirstSubClass.prototype.constructor = FirstSubClass;

关于javascript - JS中的类继承和私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14184007/

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