문제
var author = {
firstname: 'Martin',
lastname: 'Hansen'
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
author['_'+ propStr[i]] = null;
author.__defineGetter__(propStr[i],
function() {
return author['_'+ propStr[i]];
});
author.__defineSetter__(propStr[i],
function(val) {
author['_'+ propStr[i]] = val;
});
};
}
위의 코드는 객체 저자에 대한 제공된 속성 (배열)에 대한 세터/게터를 생성합니다.
그러나 FirstName과 LastName이 모두 아래 코드를 호출 할 때 Olsen입니다. 내가 뭘 잘못하고 있습니까?
settersGetters(['firstname', 'lastname']);
author.firstname = 'per';
author.lastname = 'olsen';
console.log(author.firstname);
console.log(author.lastname);
해결책
정의는 폐쇄로 이루어 지므로 모든 세터는 i의 마지막 값을 사용합니다.
대신 사용하십시오 :
function setterGetter(property)
{
author['_'+ property] = null;
author.__defineGetter__(property,
function() {
return author['_'+ property];
});
author.__defineSetter__(property,
function(val) {
author['_'+ property] = val;
});
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
setterGetter(propStr[i]);
};
}
다른 팁
나는 이것이 폐쇄 문제라고 생각합니다. 몇몇 도움이되는 사람들이 나에게 설명했습니다. 여기.
포장 해보세요 i
함수 내부를 참조하고 폐쇄를 읽습니다. 모든 도움에도 불구하고, 나는 여전히 그들을 이해하지 못한다고 고백합니다.
제휴하지 않습니다 StackOverflow