在阅读了很多关于单例模式的文章并进行了一些测试后,我发现像这样的单例模式没有区别(http://jsfiddle.net/bhsQC/1/):
var TheObject = function () {
var instance;
function init() {
var that = this;
var foo = 1;
function consoleIt() {
console.log(that, foo);
}
return {
bar: function () {
consoleIt()
}
};
}
return {
getInstance: function () {
if (!instance) {
instance = init();
}
return instance;
}
};
}();
var myObject = TheObject.getInstance();
myObject.bar();
和这样的代码(http://jsfiddle.net/9Qa9H/3/):
var myObject = function () {
var that = this;
var foo = 1;
function consoleIt() {
console.log(that, foo);
}
return {
bar: function () {
consoleIt();
}
};
}();
myObject.bar();
它们都只创建对象的一个实例,它们都可以拥有“私有”成员,that
指向window
它们中的任何一个中的对象。只是后者更简单。如果我错了,请纠正我。
使用这样的标准构造函数(http://jsfiddle.net/vnpR7/2/):
var TheObject = function () {
var that = this;
var foo = 1;
function consoleIt() {
console.log(that, foo);
}
return {
bar: function () {
consoleIt();
}
};
};
var myObject = new TheObject();
myObject.bar();
具有正确使用 的优点that
,但不是单例。
我的问题是:这三种方法的总体优缺点是什么?(如果重要的话,我正在使用 Dojo 1.9 开发一个 Web 应用程序,所以无论哪种方式,这个对象都将在 Dojo 的内部require
)。