浅析Ext为Function扩展的五个方法

本文详细解析了Ext框架中为Function扩展的五个实用方法:createInterceptor、createCallback、createDelegate、defer及createSequence的功能与应用场景,并通过示例代码帮助读者更好地理解和运用这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天有兴趣查看了Ext的源码,就来浅析下Ext为Function扩展的五个方法吧!
首先来分析下[b]createInterceptor[/b],api是这么说的“创建一个拦截器函数,当该拦截器函数返回true时则执行原函数,否则不执行。”,首先看下它到源码:

createInterceptor : function(fcn, scope){
var method = this;
return !Ext.isFunction(fcn) ?
this :
function() {
var me = this,
args = arguments;
fcn.target = me;
fcn.method = method;
return (fcn.apply(scope || me || window, args) !== false) ?
method.apply(me || window, args) :
null;
};
}


从源码可以看出该函数有两个参数,第一过参数就是拦截器的函数,第二个参数则是作用域。我们看下这段代码:
fcn.apply(scope || me || window, args)

其中fcn就是该拦截器函数需要返回true或false,所以当返回true时则执行函数本身,否则就返回null了。


[b]createCallback[/b],当执行到回调函数需要传入参数时,你就必需调用该方法,该方法的当前域是window对象,如果你需要传入当前域就应当使用createDelegate方法。我们看下下面这段代码就可以很容易理解了:

var sayHi = function(name){
alert('Hi, ' + name);
}

// clicking the button alerts "Hi, Fred"
new Ext.Button({
text: 'Say Hi',
renderTo: Ext.getBody(),
handler: sayHi.createCallback('Fred')
});


如果sayHi这过函数不需要传入参数,那么handler就可以直接使用sayHi函数了。


[b]createDelegate[/b],简单到说就是改变原函数到当前域,由第一过参数来指定,第二个参数是数组类型的,是原函数的参数,此外还有第三个参数,因为没什么用到,这里就不多说了。


[b]defer[/b],从源码可以知道,他对原函数提供了延迟处理。


[b]createSequence[/b],创建一过函数系列,第一个参数传入函数,第二个参数为传入到当前域,该参数只当做第一个参数的当前域。通过创建函数系列可以在执行原函数之前执行一些其他操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值