我工作的一个JS框架和跨一个奇怪的现象来(或我完全缺少明显)JavaScript的动态定义属性
我使用Object.defineProperty
对象定义的属性。然而,在for循环中使用它会导致一些怪异的值。不知怎的,最后添加的属性将始终是分配的值。例如,如果我将某些内容指定为属性one
,它将被分配到属性three
。这里有一个例子(这里是一个小提琴http://jsfiddle.net/5xLdC/)
var Test = function(){};
var props = ['one', 'two', 'three'];
for(var i = 0; i < props.length; i++) {
Object.defineProperty(Test.prototype, props[i], {
get: function() {
return this['_'+props[i]];
},
set: function(val) {
this['_'+props[i]] = val;
}
});
}
var test = new Test();
test.one = 'one';
console.log(test.three) // => 'one'
如果我在forEach
循环它运行完美包装这件事。我猜的是,由于范围错误(在我的方面?),它们都保持相同的功能get
/set
。
任何人都可以解释为什么发生这种情况?
编辑:
也可以利用一个IIFE解决:
get:(function(y) {
return function() { return this['_'+props[y]]; }
})(i)
duplicate http://stackoverflow.com/questions/13787643/object-defineproperty-get-set-closure –