我的javascript类原型构造函数只为我的所有实例调用一次,而不是每个实例调用一次。将唯一超级实例链接到子类的正确方法是什么?
使用下面的代码我希望输出,所有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 OrgCounter = 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());
答案 0 :(得分:1)
您不应该将Child.prototype设置为Parent实例;特别是如果你没有在Child中使用Parent构造函数(Parent.call(this,...))。这里都详细解释了:https://stackoverflow.com/a/16063711/1641941 和这里: https://stackoverflow.com/a/28574454/1641941
您应该使用Object.create:
设置子原型Sub.prototype = Object.create(Org.prototype);