Javascript单例继承
我想保留一个单亲班级。所有继承父类的clild类都将能够共享同一父类对象。如何做到这一点Javascript单例继承,javascript,oop,inheritance,singleton,Javascript,Oop,Inheritance,Singleton,我想保留一个单亲班级。所有继承父类的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 C
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中实现这种单例继承?有什么想法吗?当您从任何实例调用
getA
时,其中this
的值将指向实例本身。如果将setter代码更改为以下内容,则可以实现所需的目标:
ParentClass.prototype.setA = function(inp){
ParentClass.prototype.a = inp;
}
请注意,从父类实例调用
getA
将返回null
,构造函数定义自己的属性a
,该属性将从原型中隐藏该属性。将此类静态值放在其他地方此
是当前实例,您不希望在其中创建新属性。选择包括:
(如@bfavareto所示),这将导致所有实例继承并能够覆盖它ParentClass.prototype
- 作用域变量(基本上实现显示模块模式):
函数对象本身:父类
ParentClass.prototype.setA = function(inp){ ParentClass.a = inp; }; ParentClass.prototype.getA = function(){ console.log("get a "+ParentClass.a); return ParentClass.a; };
b
和c
是ParentClass
的实例,那么单例模式目前甚至不起作用。
ParentClass.prototype.setA = function(inp){
ParentClass.a = inp;
};
ParentClass.prototype.getA = function(){
console.log("get a "+ParentClass.a);
return ParentClass.a;
};