3

明らかにするパターン内でプライベート関数を呼び出そうとしています。これは私のコードです:

var module = (function(){
    var privateMethod = function(val) {
        console.log(val);
    }
    var publicMethod = function() {
        var functionString = "privateMethod";
        /** This what I tried
        functionString.call('test');
        window[module.privateMethod]('test');
        */
    }
    return {
        init: publicMethod
    }
})();

$(document).ready(function(){
    module.init();
});

誰かが私を助けることができますか?

ありがとう!

4

1 に答える 1

7

オブジェクトのプライベート関数のプロパティを作成しますか?

var module = (function(){
    var privateFuncs = {
        privateMethod: function(val) {
            console.log(val);
        }
    };
    var publicMethod = function() {
        var functionString = "privateMethod";
        privateFuncs[functionString]('test');
    };
    return {
        init: publicMethod
    };
})();

他の試みは両方とも、さまざまな理由で失敗します。

  • functionString.call('test')functionString文字列リテラルを参照しているため、機能しません。メソッドはありませんcall

  • window[module.privateMethod]('test')まず、moduleプロパティがないため、機能しませんprivateMethod。もしそうなら、それは「プライベート」ではありません。window[undefined]これは、関数ではないを呼び出そうとしていることを意味します。

于 2013-06-25T10:09:09.717 に答える