JS设计模式(一)
来源:互联网 发布:win7 内存优化 编辑:程序博客网 时间:2024/06/03 12:30
(参考书籍 《JavaScript设计模式与开发实践》 曾探·著 人民邮电出版社)
单例模式
demo1
var Singleton= function (name) { this.name=name; this.instance=null;};Singleton.prototype.getName= function () { console.log(this.name);};Singleton.getInstance= function (name) { if(!this.instance){ this.instance=new Singleton(name); } return this.instance;};var a= Singleton.getInstance('dom');var b= Singleton.getInstance('bom');console.log(a === b); // true;a.getName(); // tomb.getName(); // tom
demo2
var CreateDiv=(function(){ var instance; var CreateDiv= function (html) { if(instance){ return instance; } this.html=html; this.start(); return instance=this; }; CreateDiv.prototype.start= function () { var div = document.createElement('div'); div.innerHTML=this.html; document.body.appendChild(div); }; return CreateDiv; })(); var a = new CreateDiv('zhuge'); var b = new CreateDiv('zhaoyun'); console.log(a === b); // true
demo3
var UniqueDiv= function (html) { this.html=html; this.start(); }; UniqueDiv.prototype.start= function () { var div = document.createElement('div'); div.innerHTML=this.html; document.body.appendChild(div); }; var ProxyUniqueDiv=(function(){ var ins; return function (html) { if(!ins){ ins=new UniqueDiv(html); } return ins; } })(); var c = new ProxyUniqueDiv('赵云'); var d = new ProxyUniqueDiv('马超'); console.log(c === d); // true
demo4 -js
// 使用命名空间 var namespace1={ a: function () { console.log(111); }, b: function () { console.log(222); } }; // 使用闭包 var myOne = (function(){ var _name = 'zhuge'; var _age=66; return { getMsg: function () { return _name+" : "+_age; } } })(); console.log(myOne.getMsg()); // zhuge : 66
demo5 -base
var createLoginLayer=(function(){ var div; return function () { if(!div){ div=document.createElement('div'); div.innerHTML='login window'; div.style.display='none'; document.body.appendChild(div); } return div; } })(); document.getElementById('btn').onclick= function () { var loginLayer = createLoginLayer(); loginLayer.style.display='block'; };
demo6 -better
var createLoginLayer= function () { var div = document.createElement('div'); div.innerHTML = 'this is login window'; div.style.display = 'none'; document.body.appendChild(div); return div; }; var getSingle= function (fn) { var result ; return function () { return result || ( result=fn.apply(this,arguments) ); } }; var createSingleLoginLayer = getSingle(createLoginLayer); document.getElementById('btn').onclick= function () { var loginLayer=createSingleLoginLayer(); loginLayer.style.display='block'; }; var createSingleIframe=getSingle(function () { var iframe = document.createElement('iframe'); document.body.appendChild(iframe); return iframe; }); document.getElementById('btn').onclick= function () { var loginLayer= createSingleIframe(); loginLayer.src='https://www.baidu.com'; };
阅读全文
0 0
- JS设计模式(一)
- JS设计模式(一)Mixin classes
- JS原型设计模式(一)
- JS设计模式一:单例模式
- js设计模式之Module模式(一)
- JS设计模式一:单例模式
- JS原型设计模式(四)之缺陷(一)
- 设计模式(一)
- 设计模式 (一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 设计模式(一)
- 《C++ Concurrency in Action》笔记1 join和detach
- 数据库双重负载均衡读写分离及双活集群
- onCreate中的savedInstanceState
- Android Studio 鼠标悬停文档显示fetching documentation的问题
- Android Bug
- JS设计模式(一)
- jQuery-基本选择器
- 检测数据集分析VOC+COCO_RGBD
- DES详解
- 小程序脚本语言WXS详解
- 西瓜书《机器学习》课后答案——Chapter3_3.3
- MySQL基础教程之存储过程
- 极光推送中遇到的坑,NSCocoaErrorDomain Code=3000 “未找到应用程序的“aps-environment”的授权字符串
- apue 习题4.6参考答案