Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的单例模式_Javascript_Design Patterns_Singleton_Gang Of Four - Fatal编程技术网

JavaScript中的单例模式

JavaScript中的单例模式,javascript,design-patterns,singleton,gang-of-four,Javascript,Design Patterns,Singleton,Gang Of Four,下面是一个非常流行的JavaScript单例模式实现示例: var mySingleton = (function() { var instance; function init() { function privateMethod() { console.log("I am private"); } var privateVariable = "Im also private"; var

下面是一个非常流行的JavaScript单例模式实现示例:

var mySingleton = (function() {
    var instance;

    function init() {
        function privateMethod() {
            console.log("I am private");
        }
        var privateVariable = "Im also private";
        var privateRandomNumber = Math.random();
        return {
            publicMethod: function() {
                console.log("The public can see me!");
            },
            publicProperty: "I am also public",
            getRandomNumber: function() {
                return privateRandomNumber;
            }
        };
    };

    return {
        getInstance: function() {
            if (!instance) {
                instance = init();
            }
            return instance;
        }
    };
})();
我已经思考了一段时间,但并不真正理解这种复杂性的必要性,因为我们可以用这个简单的代码实现相同的结果:

singleton = (function() {
    var obj = {
        someMethod: function() {}
    }

    return obj;
}());

我在这里忽略了什么吗?

是的,在大多数情况下,您不需要这种复杂性,只要这样就可以了

var singleton = {
    someMethod: function() {}
};
但是,带有
getSingleton
函数的模式确实有一个优点:仅在调用函数时(第一次)构造对象,而不是在实际需要对象之前。根据对象的复杂性,这可以提高内存使用率和程序的启动时间。加载模块基本上是延迟的。

可能是重复的