我想保留一个单亲班级。继承父类的所有clild类都将能够共享同一个父类对象。如何实现?
var ParentClass = function(){
this.a = null;
}
ParentClass.prototype.setA = function(inp){
this.a = inp;
}
ParentClass.prototype.getA = function(){
console.log("get a "+this.a);
}
// Clild Class
var ClassB = function(){}
ClassB.prototype = Object.create(ParentClass.prototype);
var b = new ClassB();
b.setA(10);
b.getA(); //it will return 10
//Another clild Class
var ClassC = function(){}
ClassC.prototype = Object.create(ParentClass.prototype);
var c = new ClassC();
c.getA(); //I want 10 here.
据我所知,至于第二个clild类,父类再次实例化,这就是我无法访问旧对象的原因。我如何在Javascript中实现这个单例继承?有什么想法吗?
答案 0 :(得分:2)
将此类静态值放在其他位置。 this
是当前实例,而不是您要创建新属性的位置。选择是:
ParentClass.prototype
(正如@bfavaretto所示),这将导致所有实例继承并能够覆盖它一个范围变量(基本上实现了揭示模块模式):
(function() {
var a;
ParentClass.prototype.setA = function(inp){
a = inp;
};
ParentClass.prototype.getA = function(){
console.log("get a "+a);
return a;
};
}());
ParentClass
函数对象本身:
ParentClass.prototype.setA = function(inp){
ParentClass.a = inp;
};
ParentClass.prototype.getA = function(){
console.log("get a "+ParentClass.a);
return ParentClass.a;
};
答案 1 :(得分:1)
当您从任何实例调用getA
时,其中this
的值将指向实例本身。如果您将setter代码更改为:
ParentClass.prototype.setA = function(inp){
ParentClass.prototype.a = inp;
}
请注意,从ParentClass实例调用getA
将返回null
,构造函数定义一个自己的属性a
,它将隐藏原型中的属性。{/ p>