在阅读了很多关于单例模式的文章并进行了一些测试后,我发现像这样的单例模式没有区别(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();
Run Code Online (Sandbox Code Playgroud)
和这样的代码(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();
Run Code Online (Sandbox Code Playgroud)
它们都只生成一个对象实例,它们都可以有"私有"成员,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();
Run Code Online (Sandbox Code Playgroud)
具有正确使用的优点that,但不是单身人士.
我的问题是:这三种方法的总体优势和劣势是什么?(如果重要的话,我正在使用Dojo 1.9开发一个Web应用程序,所以无论哪种方式,这个对象都将在Dojo中require).
我认为前两者之间实际上并没有太大的区别。
第一个的getInstance行为更像是 Java 等经典 OOP 语言中的单例模式。
第二种方法的行为更像是经典 OOP 语言中的静态类。
显然,这两个问题都是所有单身人士所面临的问题(如果你在谷歌上查找的话,有大量的材料)。
最后一种方法甚至没有真正使用new- 您从“构造函数”返回一个对象。显然,这根本不是单例,因此,这将是首选方法。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |