简短问题:我可以在defineProperty调用中使用对象作为值吗?目前我遇到的问题是类的所有实例共享同一个对象。
小例子:
var Test = function () {
};
var p = Test.prototype;
Object.defineProperty(p, 'object', {
value: new TestObject(),
enumerable: true,
writeable: false
});
一个简单的测试用例:
var x = new Test();
var y = new Test();
y.object.test = 'Foobar';
console.log(x.object.test); // --> Foobar
目前我必须以这种方式解决这个问题:
var Test = function () {
this.initialize();
};
var p = Test.prototype;
p._object = null;
p.initialize = function () {
this._object = new TestObject();
};
Object.defineProperty(p, 'object', {
get: function () { return this._object; },
enumerable: true
});
可以在没有额外属性的情况下获得解决方案吗?
答案 0 :(得分:0)
只需将defineproperty从Test prototype definition移动到Test definition,就可以在构造函数调用中创建一个新的TestObject实例:
var TestObject = function() { }
var Test = function () {
if(this==window) throw "Test called as a function";
Object.defineProperty(this, 'object', {
value: new TestObject(),
enumerable: true,
writeable: false
});
};
一个简单的测试用例
var x = new Test();
var y = new Test();
x.object.test = 'Foo';
y.object.test = 'Bar';
console.log(x.object.test, y.object.test); // Foo Bar