我想使用原型继承新的对象实例。
测试用例:
var MyObj = function() {}
MyObj.prototype.objName = {}
// I want this to be a different object for each instance of MyObj
var o1 = new MyObj (),
o2 = new MyObj ();
o1.objName['a'] = 1;
o2.objName['a'] = 2;
alert(o1.objName['a']) // 2
alert(o1.objName === o2.objName) // true
这意味着原型中的对象不是作为它的副本被继承,而是作为它的引用。
我知道通常你可以这样做。
var MyObj = function() {
this.objName = {}
}
var o1 = new MyObj(),
o2 = new MyObj();
alert(o1.objName === o2.objName) // false
这很好用,但在我的情况下,这不是一个选择。我真的需要在 MyObj 函数之外定义 objName 。
我设法“解决”了这个问题
MyObj.prototype.objName = function() {
if ( this._objName === undefined ) {
this._objName = {};
}
return this._objName;
}
var o1 = new MyObj(),
o2 = new MyObj();
o1.objName()['a'] = 1;
o2.objName()['a'] = 2;
alert(o1.objName()['a']) // 1
但这不是很漂亮,而且这段代码的性能要差得多。
有什么方法可以更优雅地解决这个问题吗?