js 设计模式 第六章 chaining
来源:互联网 发布:百度大数据研究中心 编辑:程序博客网 时间:2024/04/29 03:58
why?
chain 是针对对象的,chain链条上的所有方法都是这个对象的方法
一个没有用chain技巧的
var dom = document.getElementById('dom');setStyle(dom,'color','green');show(dom);
如果使用了chain
$('dom').setStyle('color','green').show();
chain技巧,让相关操作,紧密地组织在一起,拥有高内聚的特点。故更优雅、易读、易理解
how?
在类的prototype中,每一个方法的结束,返回this,这样,这个类的方法就可以chainable
what?
jquery 中 $ 的简单模拟实现
(function(){ function _$(els){ this.elements = [];for(var i=0,len=els.length;i<len;++i){ var element = els[i];if(typeof element === 'string'){ element = document.getElementById(element);}this.elements.push(element);}}window.$ = function(){ return new _$(arguments);} _$.prototype = { each : function(fn){ for(var i=0,len=this.elements.length;i<len;i++){ fn.call(this,this.elements[i]);}},setStyle : function(prop,val){ this.each(function(el){ el.style[prop] = val; }); return this;}, show : function(){ var that = this;this.each(function(el){ that.setStyle('display','block');});return this;},addEvent: function(type, fn) {var add = function(el) {if (window.addEventListener) { el.addEventListener(type, fn, false);}else if (window.attachEvent) { el.attachEvent('on'+type, fn);}};this.each(function(el) { add(el);});return this;}};window.$ = function(){ return new _$(arguments);}})();
$(window).addEvent('load',function(){ $('test-1','test-2').show(). setStyle('color','red'). addEvent('click',function(e){ $(this).setStyle('color','green'); });});
chain 的特点是,所有函数都返回this,如果希望放回其他对象,该怎么办呢?
为了不改变chain在各个函数中的一致性,我们还是让所有函数放回this,针对需要返回其他对象的函数,我们通过会掉函数来实现。
如:
getName : function(name,callback){ var name = this.name; callback.call(this,name); return this;}
我们可以再callback中处理数据,而后还是返回this
- js 设计模式 第六章 chaining
- 大话设计模式java版本 第六章 装饰模式
- 命令模式-《Head First 设计模式》第六章
- 设计模式学习第六天
- 大话设计模式-第六夜
- js 设计模式 第二章
- js 设计模式 第三章
- js 设计模式 第四章
- 第六篇 设计模式--建造者模式
- 设计模式C++版:第六式迭代器模式
- 设计模式学习---第六节:观察者模式
- 第六章 模式匹配
- 第六章 装饰模式
- 第六章 命令模式
- 第六章 命令模式
- 第六个设计模式:模板方法
- IOS设计模式第六篇之适配器设计模式
- 《大话设计模式》读书笔记(C++代码实现) 第六章:装饰模式
- linux路由相关操作
- APP应用程序图标 及 程序启动画面设置
- ubuntu硬盘分区知识
- Ajax请求12030错误
- 黑马程序员--银行业务调度系统
- js 设计模式 第六章 chaining
- service XXX restart的执行流程
- eccube2.12.2在xampp1.7.4下安装总结
- 非主流伤感日志_有些东西注定是要消失掉的
- 一个超棒的帮助你了解科技公司如何盈利的网站 - rcs.seerinteractive.com
- oracle/sql server查看与断开当前的数据库连接
- 串T中是否含有串P
- ExtAsp.Net 后台按钮绑定弹出窗口事件,需要点击两次才能弹出窗口
- 视频编解码原理及如何在VC6.0中运行JM8.6