0

几天前我问了一个类似的问题,但我想我还是做错了什么,所以这个问题更集中:

据我了解并根据这本书,该函数privateFunction应该不能从mySingleton对象外部获得,publicFunction只能以这种方式调用:mySingleton.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() {}
    };
}();

windowdocument废话undefined是不需要的。

于 2012-11-02T08:43:17.420 回答