extjs createDelegate(obj,args,appendArgs) 函数解析

方法目的:给指定函数(例中:funcion1) :指定传进的参数值 (删除一些,增加一些,替换一些);


返回一个函数, 这个函数调用原函数,原函数中的this指向obj ,关于这个函数的参数由 appendArgs 指定 :

如 function2=function1.createDelegate(obj,args,appendArgs);

function2 call function1 ,function1 中的 this == obj

1. appendArgs falsy

那么 调用function2时传的参数被忽略,args数组参数作为function1的参数运行。

2. appendArgs === true

那么 调用function2时传的参数放在args数组前面合成一个新的数组,作为function1的参数运行。

3.typeof appendArgs == 'Number'

假设 调用 function2时传的参数 为 array1 (注意要 slice 为 真正的 Array)
那么将 args 数组插入到 array1 的指定 appendArgs位置 (利用 splice( appendArgs,0 ))
然后再把最终数组 作为function1的参数运行。



示例使用代码:

Html代码   收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
  2.         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  3. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
  4. <head>  
  5. <title>createDelegate测试</title>  
  6.   
  7. <script type="text/javascript" src="javascript/ext-base.js"></script>  
  8. <script type="text/javascript" src="javascript/ext-core.js"></script>  
  9.   
  10.   
  11.   
  12. <script type="text/javascript">  
  13. //<![CDATA[ 
  14.  
  15. Ext.onReady(function() { 
  16.     function action_ba(info) { 
  17.         alert(this.dom.innerHTML); 
  18.         alert(info); 
  19.     } 
  20.      
  21.     function action_bb(e,this_,o,info) { 
  22.         alert(this.dom.innerHTML); 
  23.         alert(e.type+'  '+info); 
  24.     } 
  25.      
  26.     function action_bc(info,e) { 
  27.         alert(this.dom.innerHTML); 
  28.         alert(info +'  '+e.type); 
  29.     } 
  30.      
  31.     Ext.get('action_a').on('click',action_ba.createDelegate(Ext.get('action_a'),['自定义参数覆盖event系列参数'])); 
  32.  
  33.     Ext.get('action_b').on('click',action_bb.createDelegate(Ext.get('action_b'),['自定义参数在最后'],true)); 
  34.      
  35.     Ext.get('action_c').on('click',action_bc.createDelegate(Ext.get('action_c'),['自定义参数在第一位'],0)); 
  36.         
  37. }); 
  38. //]]>  
  39.   
  40. </script>  
  41.   
  42. </head>  
  43. <body>  
  44.   
  45. <button id='action_a'> 测试覆盖参数</button>  
  46. <button id='action_b'> 测试添加参数</button>  
  47. <button id='action_c'> 测试插入参数</button>  
  48.   
  49.   
  50.   
  51.   
  52.   
  53.   
  54.   
  55. </body>  
  56. </html>  
 
附录:Extjs 实现代码

Js代码   收藏代码
  1. Function.prototype.createDelegate = function(obj, args, appendArgs){  
  2.         var method = this;  
  3.         return function() {  
  4.             var callArgs = args || arguments;  
  5.             if(appendArgs === true){  
  6.                 callArgs = Array.prototype.slice.call(arguments, 0);  
  7.                 callArgs = callArgs.concat(args);  
  8.             }else if(typeof appendArgs == "number"){  
  9.                 callArgs = Array.prototype.slice.call(arguments, 0);   
  10. // copy arguments first  
  11.                 var applyArgs = [appendArgs, 0].concat(args);   
  12. // create method call params  
  13.                 Array.prototype.splice.apply(callArgs, applyArgs);   
  14. // splice them in  
  15.             }  
  16.             return method.apply(obj || window, callArgs);  
  17.         };  
  18.     } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值