0

私は数日前に同様の質問をしましたが、私はまだ何か間違ったことをしていると思うので、これはより焦点を当てています:

私が理解している限り、この本によれば、この関数はオブジェクトprivateFunctionの外部からは利用できないと想定されており、この方法でのみ呼び出すことができます。mySingletonpublicFunctionmySingleton.publicFunction

ただし、privateFunctionは、私の意志と意図に反して、オブジェクトの外部で非常に利用可能です。

何故ですか?私は何が間違っているのですか?

    var mySingleton = new (function (window, document, undefined) {

            var privateFunction = function () {
                //code
            },

            mySingleton = {
                publicFunction: function () {
                    //code
                }
            };

        return mySingleton;
    })(window, document, undefined);

編集:私はちょうど問題を見つけました。構文エラー、屈辱的。2行目のセミコロンを見てください。昨夜投稿したときにこの行を見逃しました。

    var mySingleton = new (function (window, document, undefined) {
        var self = this;

        privateFunction = function () {
            //code
        },

        mySingleton = {
            publicFunction: function () {
                //code
            }
        }

        return mySingleton ;
    })(window, document, undefined);

セミコロンをコンマに置き換えると、プライベートメソッドが「再び」プライベートになります。とにかく、このコードを見ると、直後のコンマのために、そのような構文が構文エラーを引き起こすと予想しますprivateFunction-これはすべて間違っていますか?

4

1 に答える 1

0

この種のコードを見たことがありますか?

var toto = 'titi',
    titi = 'tata',
    tata = 'toto';

これは複数の割り当てです。これにより、varキーワードを毎回再利用する必要がなくなります。ただし、varキーワードを使用していないため、privateMethod実際にはグローバルスコープにリークされます。それは良くないね。

私はあなたがこのパターンを探していると思います:

var mySingleton = function() {
    function privateMethod() {}

    return {
        publicMethod: function() {}
    };
}();

、およびがらくたは必要ありませんwindowdocumentundefined

于 2012-11-02T08:43:17.420 に答える