2012年3月11日星期日

jquery实现aop?

如果想重写jQuery某个方法又不想直接改源码,你可以这样 
改写unique() 
代码 
  1. (function($){  
  2.    
  3.     var _old = $.unique;//备份原始方法  
  4.    
  5.     $.unique = function(arr){   
  6.         //如果是dom对象就使用原始方法  
  7.         if (!!arr[0].nodeType){  
  8.             return _old.apply(this,arguments);  
  9.         } else {  
  10.             //使用grep/inArray组合方法去重  
  11.             return $.grep(arr,function(v,k){  
  12.                 return $.inArray(v,arr) === k;  
  13.             });  
  14.         }};})(jQuery);  
  15.    
  16. //test  
  17. var arr = ['first',7,true,2,7,true,'last','last'];  
  18. $.unique(arr); // ["first", 7, true, 2, "last"]var arr = [1,2,3,4,5,4,3,2,1];  
  19. $.unique(arr); // [1, 2, 3, 4, 5]  


方法改写的模式: 
代码 
  1. (function($){  
  2.    
  3.     // store original reference to the method  
  4.     var _old = $.fn.method;  
  5.    
  6.     $.fn.method = function(arg1,arg2){  
  7.    
  8.         if ( ... condition ... ) {  
  9.            return  ....   
  10.         } else {           // do the default  
  11.            return _old.apply(this,arguments);  
  12.         }  
  13.     };})(jQuery);  

没有评论:

发表评论