Javascript 单例继承
Javascript singleton inheritance
我想保留一个父类。 继承父类的所有 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 中实现这种单例继承?知道吗?
把这样的静态值放在别的地方。 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; };
当您从任何实例调用getA
时,其中this
的值将指向实例本身。如果您将 setter 代码更改为以下内容,则可以实现所需的内容:
ParentClass.prototype.setA = function(inp){
ParentClass.prototype.a = inp;
}
请注意,从 ParentClass 的实例调用getA
将返回 null
,并且构造函数定义了一个自己的属性a
,该属性将隐藏原型中的属性。
相关文章:
- 和兼容的单例骨干模型
- 有状态单例模块
- 在什么情况下我们需要在javsacript中实现单例类
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- 使用Ext.Ajax.request使ExtJS单例返回对象
- 原始值被称为单例的现象是什么?
- AngularJS 模式单例在服务中未更新视图
- 创建命名空间 Javascript 单例类的对象
- 流星.js单例确认框
- Javascript 单例模式
- 如何将 AMD 模块从单例转换为实例
- 为什么这个javascript单例方法有效
- 扩展现有单例
- JavaScript 对象的单例行为
- ES2015 单例或服务提供商或模块,用于敲除.js组件
- 如何在 chrome 开发者控制台中查看在 DOJO 中创建的单例对象
- 在单例模式中引用变量的根父级
- XHR 上传功能的单例引用不起作用
- 角示波器单例
- Javascript 单例继承