[ExtJS3.2源码每天一小时]ExtJS中创建回调createCallBack与createDelegate的异同(之十)...

[size=medium]createCallBack与createDelegate是ExtJS中创建回调函数的两个方法
也许很多人并没有接触到这两个方法,因为在使用ExtJS的过程中,如果对ExtJS研究的不是特别深入,这两个方法基本上不会浮出水面,或许有的人从官方或者其他人写的例子中看到过这两个方法,就模仿着例子开始使用它们了,但是它们究竟是做什么的,它们两个的异同有哪些?今天我们就来说一说。[/size]

在看下面的内容之前,请看我发布的另一篇博文,ExtJS中对Function类的扩展。

1.createCallBack与createDelegate的相同点:
(1)二者的用途皆为创建一个带有指定参数的回调函数
(2)二者都采用闭包机制,根据原函数创建了一个新的函数

2.createCallBack与createDelegate的不同点:
(1)createCallBack 是在创建该回调函数时指定参数,执行时传入的参数不再有效:
例如:

function testFunc(arg){
alert(arg);
}
//创建回调函数时,制定参数arg为'aa'
var callBack = testFunc.createCallBack('aa');
//执行时callBack再传入的参数不再有效
callBack('bb');//打出aa
callBack(); //这样调用即可

另:createCallBack不可指定回调函数的作用域,它默认的作用域为window

(2)createDelegate 创建回调函数时可以指定参数,执行时也可以传入参数,并且可以传入作用域。
createDelegate 可以传入三个参数: obj, args, appendArgs
obj:对应回调函数的作用域
args:创建回调函数传入的参数
appendArgs:是否追加参数,意思是如果appendArgs为true,那么args这些参数将会追加到该回调函数执行时传入的参数列表里,如果appendArgs为false,那么args参数将无效。如果appendArgs为数字值,那么默认追加,追加的到数组中的位置即appendArgs的值
例如:

function testFunc(arg1,data,arg3){
this.dom.innerHTML=data['name'];//改变节点内容,假设data有name属性
alert(arg1);//打出‘aa’
alert(arg3);//打出‘bb’
}
var store = new Ext.data.JsonStore(.....);
var testSpan = Ext.get('testSpan');
//作用域传入testSpan那么testFunc执行时this就是指的testSpan了,
//args参数指定为['aa']
//appendArgs指定为true
//执行时 arg1传入的是'aa'
var callBack = testFunc.createDelegate(testSpan,['aa'],true);

store.on('load',function(){
//通过回调函数执行再传入两个参数
//store.getAt(0)对应data
//bb对应arg3
callBack(store.getAt(0),'bb');
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值