js: 单例模式

来源:互联网 发布:淘宝上买steam游戏商家 编辑:程序博客网 时间:2024/05/20 06:05

**

单例模式

**
保证一个类仅有一个实例,并提供访问他的全局访问点。
用内部变量来标示当前是否已创建对象,是则返回已创建的对象,否则进行创建,并返回。
JavaScript 本身没有类,需要某个对象直接创建即可,这个对象就是单列模式的单个实例,而JavaScript模拟类的实现是为了能创建多个相同实例。再对这个模拟类实现单例是倒回本身特性。

1.单独实现为单例模式的类

    // 单独实现为单例模式的类    var SingleOrigin = (function(win){      var instance = null;      var SingleOrigin = function(){        if (instance) return instance;        this.init();        instance = this;        // return instance = this;      }      SingleOrigin.prototype.init = function(){        this.left = 0;        this.top  = 0;      }      return SingleOrigin;    })(window);    var a = new SingleOrigin();    var b = new SingleOrigin;    console.log(a === b); // true

2.使用代理将 普通类 代理为 单例模式类(封装个新类)

    // 使用代理将 普通类 代理为 单例模式类    var Origin0 = function(){      this.init();    }    Origin0.prototype.init = function(){      this.left = 0;      this.top  = 0;    }    // 普通类创建实例    var aa2 = new Origin0;    var bb2 = new Origin0;    console.log(aa2 === bb2); // false    // 代理为 ProxySingleOrigin     var ProxySingleOrigin = (function(win){      var instance = null;      return function(){        if(instance) return instance;        instance = new Origin0;        return instance;      }    })(window);    var aa = new ProxySingleOrigin;    var bb = new ProxySingleOrigin;    console.log(aa === bb); // true

部分代码引用和修改:《JavaScript 设计模式与实践》by曾探,

原创粉丝点击