请问这些代码为什么叫做单例模式,创建新的变量不是也可以创建实例吗?

var foo2=(function (){

var so = 'cool';
var an = [1,2,3];
function doSo() {
    console.log(so);
}
function doAn() {
    console.log(an.join("!"));
}
return {
    doSo:doSo,
    doAn:doAn

};

})();

var foo = foo2;
var aa = foo2;
foo.doAn();
aa.doSo();

阅读 2.6k
4 个回答

所谓单例模式,就是说这个东西只会有一个,你没有办法生成新的具备同样结构的东西。

保证系统中一个类只有一个实例。

你这里foo和aa用的都是同一个foo2变量。以后不管你怎么操作,都只会操作foo2这个变量。

给个链接

foo === aa

这2个对象相等,哪里创建了新的实例???

新手上路,请多包涵

这里使用闭包,返回一个对象,一直保持着对doSo、doAn的引用,foo2每次赋值都是同一个引用对象。

类似于变量 foo 和 aa 都指向创建foo2时的内存地址,因此是一个实例。foo === aa // result: true

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题