因此,有很多关于单例模式和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.
}());