JavaScript中的Singleton模式

Singleton pattern in JavaScript

本文关键字:模式 Singleton 中的 JavaScript      更新时间:2023-09-26

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

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函数的模式确实有一个优点:只有在调用函数(第一次(时才构造对象,而不是在实际需要对象之前。根据对象的复杂性,这可以提高内存使用率和程序的启动时间。加载模块基本上是懒惰的。