如何向构造函数创建的 javascript 对象的所有实例添加数据/函数,以便所有实例具有相同的引用而不是它的副本?
基本上实现了 C# 中静态方法的等价物。
例如,给定以下创建 Widget 类的代码。
(function() {
var Widget = function() {
};
Widget.prototype.init = function(data) {
this.data = data;
};
this.Widget = Widget;
}).call(this);
var instance1 = new Widget();
instance1.init('inst1');
var instance2 = new Widget();
instance2.init('inst2');
alert(instance1.data); // inst1
alert(instance2.data); // inst2
在上述情况下,每个实例都有自己的 data 属性副本。但是我想添加一个为所有当前和未来实例设置数据的函数。
我目前的解决方案是向构造函数对象添加一个函数,而不是它的原型。例如,请参见下文。这有什么陷阱吗,有没有更好的方法?
(function() {
var Widget = function() {
};
Widget.prototype.init = function(data) {
this.data = data;
};
Widget.addStaticData = function(data) {
this.staticData = data;
};
Widget.prototype.getStaticData = function() {
return Widget.staticData;
};
this.Widget = Widget;
}).call(this);
var instance1 = new Widget();
instance1.init('inst1');
Widget.addStaticData('static');
var instance2 = new Widget();
instance2.init('inst2');
alert(instance1.data); // inst1
alert(instance2.data); // inst2
alert(instance1.getStaticData()); // static
alert(instance2.getStaticData()); // static