JS模式:jq中简单的模式--》采摘自js设计(tomxu_version)
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script> //据说这就是组合模式了,就是逸带的感觉; var $ = jQuery = window.$ = function(){}; $.prototype = { addClass : function(value){ var classNames, i ,l , elem, setClass, c, cl; if( $.ifFunction(value) ){ return $.each(this,function(j){ $(this).addClass( value.call(this,j,this.ClassName) ); }) }; if(value && typeof value === "string"){ className = this.className.split(/\b/); for(var i=0, l=this.length; i<l; i++){ elem = this[i]; //这个就是又一个each循环了; if(elem.nodeType === 1){ if( !elem.className && className.length === 1 ){ elem.className = value; }else{ setClass = " " + elem.className + " "; for(c=0, cl=className.length; c<cl; c++){ if( !!setClass.indexOf( className[c] ) ){ setClass += className[c] + " "; } }; setClass += value; elem.calssName = $.trim( setClass ); } } } }; return this; } }; //facade__外观模式; $.ajax = function(){ }; $.ajax.setting.xhr = window.ActiveXObject ? activeObject() : createStndardXHR(); function createStandardXHR(){ try{ return new window.XMLHttpRequest; }catch(e){}; }; function activeXObject(){ try{ return new window.activeXObject("Microsoft","XMLHTTP"); }catch(e){} }; //jQ中的观察者模式(p/s); //使用包装包装一个jQ出来; (function($){ var o = $({}); // 让o有了jq的继承,可以使用jq的工具方法和函数 $.subscribe = function(){ o.bind.apply(o,arguments); }; $.unsubscribe = function(){ o.unbind.apply(o,arguments) }; $.publish = function(){ o.trigger.apply(o,arguments) } }(jQuery)) // 注意:这里面使用的是apply 而不是 call; apply可以直接传arguments; </script> </body> </html>
天道酬勤