gpt4 book ai didi

JavaScript 原型(prototype)构造函数仅调用一次

转载 作者:行者123 更新时间:2023-12-03 10:45:29 25 4
gpt4 key购买 nike

我的 javascript 类原型(prototype)构造函数仅对所有实例调用一次,而不是每个实例调用一次。将唯一的 super 实例链接到子类的正确方法是什么?

使用下面的代码,我期望输出,所有 uniqueId 都是唯一的:

Org {uniqueId: 4}
Org {uniqueId: 5}
Org {uniqueId: 6}
Sub {uniqueSubId: 1, uniqueId: 1}
Sub {uniqueSubId: 2, uniqueId: 2}
Sub {uniqueSubId: 3, uniqueId: 3}

然而,实际输出是所有 Sub 都有 uniqueId 1:

Org {uniqueId: 2}
Org {uniqueId: 3}
Org {uniqueId: 4}
Sub {uniqueSubId: 1, uniqueId: 1}
Sub {uniqueSubId: 2, uniqueId: 1}
Sub {uniqueSubId: 3, uniqueId: 1}

代码: var 组织计数器 = 0;

var Org = function() {
this.uniqueId = ++OrgCounter;
}

var SubCounter = 0;
var Sub = function() {
this.uniqueSubId = ++SubCounter;
}

Sub.prototype = new Org;

console.log(new Org());
console.log(new Org());
console.log(new Org());

console.log(new Sub());
console.log(new Sub());
console.log(new Sub());

JSFiddle

最佳答案

您不应该将 Child.prototype 设置为 Parent 的实例;特别是如果您不重新使用 Parent 构造函数(Child 中的 Parent.call(this,...) )。全部详细解释如下:https://stackoverflow.com/a/16063711/1641941和这里: https://stackoverflow.com/a/28574454/1641941

您应该使用 Object.create 设置 Child 原型(prototype):

Sub.prototype = Object.create(Org.prototype);

关于JavaScript 原型(prototype)构造函数仅调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28581028/

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