12

Revealing Module Patternを実装しようとしていますが、変更されたプライベートプロパティを公開できません。

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".
4

3 に答える 3

24
return {
    fullName: name,
    set: setName
};

とのを使用します。変数への参照は作成されません。事実上、コピーされます。namesetNamename

getName変数への参照を保持できるようにクロージャを利用するには、対応するメソッドを作成する必要があります。

于 2012-03-12T17:47:33.343 に答える
16
var myRevealingModule = (function(){

    var name = 'Diogo';

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

    function getName () {
       return name;
    };

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

}());

http://jsfiddle.net/yeXMx/

于 2012-03-12T17:45:57.507 に答える
0

値がオブジェクトまたは配列の属性である場合は、オブジェクトまたは配列をエクスポートできます。エクスポートは参照によって行われるため、外部ユーザーには更新された変更が表示されます。変数をエクスポートする一般的なパターンにはスカラー/オブジェクトのコピー/参照の二分法があるため、少し危険です。

于 2015-11-15T17:45:01.230 に答える