문제

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 함수 내부를 참조하고 폐쇄를 읽습니다. 모든 도움에도 불구하고, 나는 여전히 그들을 이해하지 못한다고 고백합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top