js设计模式之单例模式
思想
确保只有一个实例
提供全局访问
这么看来在全局环境下
var a = {};
这种形式就满足以上两条,但是全局变量不是单例模式代理实现单例模式
代理的作用是实现一个实例的逻辑
var createPop = function (html) {
this.html = html;
this.createdom();
}
// 原型上挂载共享属性和共享的方法
createPop.prototype.createDom = function () {
var pop = document.createElement('div');
pop.innnerHTML = this.html;
document.body.appendChild(pop);
}
var createSingle = (function () {
var instance;
return function (html) {
if(!instance) {
instance = new createPop(html);
}
return instance;
}
})()
var pop0 = new createSingle('pop0'); // 这里new的是createSingle里面的返回的匿名函数,返回的引用类型的数据(注意)
var pop1 = new createSingle('pop1');
pop0 === pop1 // true惰性单例
顾名思义就是在我们需要的时候在去创建这个单例,将创建对象和管理单例的逻辑分离开来,还是就上面的例子
// 业务逻辑
var createDom = function () {
var pop = document.createElement('div');
pop.innnerHTML = this.html;
document.body.appendChild(pop);
this.name = '测试'
return true;
}
// 保证只有一个实例
var createSingle = (function () {
var instace;
return function (fn) {
console.log(this); // 这个匿名被谁掉用,就指向谁,可以将createDom中的一些属性绑定到调用的对象上
// 这里就将createDom的name属性挂载到window上
return instace|| (instace = fn.call(this, arguments))
}
})()
createSingle(createDom);本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!