Javascript singleton接受参数

时间:2016-02-29 13:07:10

标签: javascript parameters arguments singleton

因此,有很多关于单例模式和JavaScript的问题和答案。但我仍然无法(轻松)找到一个好的答案,显示接受参数的单例。所以让我们试着改变它。

所以这就是我想出的:

Global = {};

Global.Singleton = (function () {
    var instance  = undefined;
    // The returned object (Global.Singleton):
    return {
        getInstance : function (name) {
            if (instance) return instance;
            //===========================================|
            // The 'constructor' function:
            return (function (name) {
                var _name = name;
                instance = {};
                instance.getName = function () {
                    return _name;
                };
                return instance;
            }(name));
            //===========================================|      
        }
    };
}());  

(function () {
    var instance = Global.Singleton.getInstance("Chuck");
    console.log(instance); //  Object { getName=function() }.
    console.log(instance.getName()); // Chuck.
    console.log(instance === Global.Singleton.getInstance()); // true.
}());

这是一个好设计吗? (我还不是专业人士,所以希望一些有经验的程序员会确认这是好还是坏代码。)

也许你有另一种选择,想在这里发帖呢?

修改 我不知道我在想什么,但上面的代码可以简化为这个(这可能已经在这个网站上了一千次):

Global = {};

Global.Singleton = (function () {
    var instance  = undefined;
    // The returned object (Global.Singleton):
    return {
        getInstance : function (name) {
            if (instance) return instance;
            //===========================================|
            var _name = name;
            instance = {};
            instance.getName = function () {
                return _name;
            };
            return instance;
            //===========================================|  
        }

    };
}());  

(function () {
    var instance = Global.Singleton.getInstance("Chuck");
    console.log(instance); //  Object { getName=function() }.
    console.log(instance.getName()); // Chuck.
    console.log(instance === Global.Singleton.getInstance()); // true.
}());

0 个答案:

没有答案