JavaScript 设计模式单例模式
单例模式的应用场景是比较广泛的,比如jQuery库、登陆的弹窗、Vuex和Redux中的store、websocket连接、数据库连接池等等
//用闭包来模拟单例pro,需要手动调用一次
var closureFun = function() {
var instance = null;
return function(item) {
if(!instance) {
instance = item
}
return instance
}
}
var re = closureFun()
var result = re([1, 2])
console.log(result)
var result1 = re([1, 2, 3])
console.log(result1)
//pro max 用立即执行函数,自调用一次
var closureFun = (function(){
var instance = null
return function(item) {
if(!instance){
instance = item
}
return instance
}
})()
var res = closureFun([1, 2])
console.log(res)
var res1 = closureFun([1, 2, 3])
console.log(res1)
来个简单的demo
var CreateDiv = function (html) {
this.html = html;
this.init();
};
CreateDiv.prototype.init = function () {
var div = document.createElement('div');
div.innerHTML = this.html;
document.body.appendChild(div);
};
//用立即执行函数构造一个闭包,hold住instance实例
var ProxySingletonCreateDiv = (function () {
var instance;
return function (html) {
if (!instance) {
instance = new CreateDiv(html);
}
return instance;
}
})();
//var a = new ProxySingletonCreateDiv('sven1');
var b = new ProxySingletonCreateDiv('sven2');
var c = new ProxySingletonCreateDiv('sven3');
console.log(c === b); //true
javascript 模拟静态变量
//javascript模拟静态变量
var State = (function() {
var staticValue = {
initVal: 10
}
return {
get: function(name) {
return staticValue[name] ? staticValue[name] : null
}
}
})()
var res = State.get('initVal')
console.log(res)
本文由 dealdot <dealdot#163.com> 创作, Full Stack Developer @ DeepBlue
本文最后编辑时间为: Apr 20, 2021 at 19:46 pm
转载请注明来源