jquery中的设计模式(一)
2015-12-15 11:55
483 查看
Composite(组合)模式
composite模式描述了一组对象,可以使用与处理对象的单个实例同样的方式来进行处理。这样能使我们能够以统一的方式处理单个对象或者组合。在jQuery中,把方法应用于元素或元素集合时,可以使用统一的方式来处理它们,因为这两种选择都会返回jQuery对象。
例:
$("#test").addClass(".red"); $(".test").addClass(".red");可以向单一的元素添或者一组具有test类的元素添加red类,而无需额外的工作。
jQuery源码:
addClass: function( value ) { var classes, elem, cur, clazz, j, finalValue, proceed = typeof value === "string" && value, i = 0, len = this.length; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).addClass( value.call( this, j, this.className ) ); }); } if ( proceed ) { // The disjunction here is for better compressibility (see removeClass) classes = ( value || "" ).match( rnotwhite ) || []; for ( ; i < len; i++ ) { elem = this[ i ]; cur = elem.nodeType === 1 && ( elem.className ? ( " " + elem.className + " " ).replace( rclass, " " ) : " " ); if ( cur ) { j = 0; while ( (clazz = classes[j++]) ) { if ( cur.indexOf( " " + clazz + " " ) < 0 ) { cur += clazz + " "; } } // only assign if different to avoid unneeded rendering. finalValue = jQuery.trim( cur ); if ( elem.className !== finalValue ) { elem.className = finalValue; } } } } return this; }
Adapter(适配器)模式
Adapter模式将对象或类的接口转变为与特定的系统兼容的接口。jQuery中的适配器:jQuery.fn.css()方法。它不仅有助于标准化接口,以展示样式如何应用于多种浏览器,使我们能轻松的使用简单的语法适配浏览器在后台实际支持的语法。
Facade(外观)模式
Facade 模式为更大的代码体提供了一个更简单的接口。我们经常在jQuery中发现Facade,它使开发人员能够方便的访问实现,以处理DOM操作、动画以及有趣的Ajax。
下面是jQuery的$.ajax()外观:
$.get(url,data,callback,dataType);
$,post(url,data,callback,dataType);
这些在后头进行转变:
$.ajax({
type:"post",
url:url,
data:data,
dataType:dataType
}).done(callback);
更有趣的是,上面的外观实际上是自身功能的外观,在后台隐藏大量的复杂性。
Observer(观察者)模式
jQuery核心具有对Publish/Subscribe 系统的内置支持,它被称为自定义事件。
jQuery早期版本中,使用jquery.bind() (subscribe)、jQuery.trigger() (publish) 和jQuery.unbind() (unsubscribe)可以访问这些自定义事件,但在新版本中,可以使用JQuery.on()、jQuery.trigger()、jQuery.off()来实现这样目的。
//等价于subscribe(topicName,callback)
$(document).on("topicName",function(){
//do something
});
//等价于publish(topicName)
$(document).trigger("topicName");
//等价于unsubscribe(topicName)
$(document).off("topicName");
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- 2015-2016网页设计趋势分析 Web Design of Trends
- jQuery Ajax 跨域调用
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 移动端的长按事件
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- JavaScript 各种遍历方式详解
- jQuery菜单插件用法实例
- JQuery 初体验(建议学习jquery)
- 基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
- Jquery实现的table最后一行添加样式的代码
- jQuery实现向下滑出的平滑下拉菜单效果