문제

공개 모듈 패턴을 구현하려고 하는데 수정된 개인 속성을 노출할 수 없습니다.

var myRevealingModule = (function(){

    var name = 'Diogo';

    function setName () {
       name = name + ' Cardoso';
    }

    return {
        fullName: name,
        set: setName
    };

}());

// Sample usage:
myRevealingModule.set();
console.log(myRevealingModule.fullName); // "Diogo" instead of the excepted "Diogo Cardoso".
도움이 되었습니까?

해결책

return {
    fullName: name,
    set: setName
};

그것은 가치 ~의 name 그리고 setName.변수에 대한 참조를 생성하지 않습니다.효과적으로, name 복사됩니다.

해당하는 항목을 만들어야 합니다. getName 메소드를 사용하면 변수에 대한 참조를 유지할 수 있도록 클로저를 활용할 수 있습니다.

다른 팁

var myRevealingModule = (function(){

    var name = 'Diogo';

    function setName () {
       name = name + ' Cardoso';
    };

    function getName () {
       return name;
    };

    return {
        fullName: name,
        set: setName,
        get: getName
    };

}());
.

객체 또는 배열의 값이 속성 인 경우 객체 또는 배열을 내보낼 수 있고 내보내기는 참조로이므로 사용자가 업데이트 된 변경 사항이 표시됩니다.수출 변수의 일반 패턴은 스칼라 / 객체 복사 / 참조 이분법을 갖추고 있기 때문에 조금 위험합니다.

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