Javascript中的静态私有变量

Eve*_*ven 5 javascript oop

我是Javascript的新手(即正确学习Javascript).我正在阅读第7章"Web开发人员专业Javascript第3版"中的"静态私有变量"部分.

我得到了这段代码,但我觉得它不理想:

(function(){

    //private variables and functions
    var privateVariable = 10;

    function privateFunction(){
        return false;
    }

    //constructor
    MyObject = function(){
    };

    //public and privileged methods
    MyObject.prototype.publicMethod = function(){
        privateVariable++;
        return privateFunction();
    };
})();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,他们依赖于通过省略"var"来创建MyObject作为全局变量.但是,在严格模式下,您不能省略var关键字,此代码会导致错误.

我的重写是否正确?

var MyObject = (function(){

    //private variables and functions
    var privateVariable = 10;

    function privateFunction(){
        return false;
    }

    var MyObject = function (){
    }

    //public and privileged methods
    MyObject.prototype.publicMethod = function(){
        privateVariable++;
        return privateFunction();
    };

    return MyObject;
})();
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么这本书会省略这个问题的解决方案,并采用惰性方法.我坚信在我的所有代码中使用"严格模式".

Mar*_*aov 1

是的,您的重写是正确的。不过,我建议你改变这本书。这是一个非常好的系列: https ://github.com/getify/You-Dont-Know-JS

这本书提供了非常好的示例和用法+解释: https://addyosmani.com/resources/essentialjsdesignpatterns/book/