은 내가 JS 프레임 워크에 노력하고 뭔가 이상한 우연히 (또는 나는 완전히 명백한 누락)자바 스크립트를 동적으로 정의 속성
나는 Object.defineProperty
를 사용하여 객체에 속성을 정의하고있다. 그러나 for 루프 내에서 이것을 사용하면 펑키 한 값을 얻을 수 있습니다. 어떻게 든 마지막으로 추가 된 속성은 항상 할당 된 값이됩니다. 예를 들어, 어떤 속성을 one
에 할당하면 three
속성에 할당됩니다. 여기 예제 (그리고 여기에 바이올린 http://jsfiddle.net/5xLdC/이다) 나는 그것을 완벽하게 정상적으로 작동 forEach
루프에서이 작업을 마무리하려는 경우
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'
. 내가 추측하는 바는 스코프 오류로 인해 모두 동일한 기능을 보유하고 있다는 것입니다 (내 부분에서는?). get
/set
왜 이런 일이 발생하는지 설명 할 수 있습니까?
EDIT :
또한이 가능 IIFE 로모그래퍼 해결 :
get:(function(y) {
return function() { return this['_'+props[y]]; }
})(i)
중복 http://stackoverflow.com/questions/13787643/object-defineproperty-get-set-closure –