浏览 1804 次
锁定老帖子 主题:浅析Ext为Function扩展的五个方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-27
首先来分析下createInterceptor,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了。 createCallback,当执行到回调函数需要传入参数时,你就必需调用该方法,该方法的当前域是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函数了。 createDelegate,简单到说就是改变原函数到当前域,由第一过参数来指定,第二个参数是数组类型的,是原函数的参数,此外还有第三个参数,因为没什么用到,这里就不多说了。 defer,从源码可以知道,他对原函数提供了延迟处理。 createSequence,创建一过函数系列,第一个参数传入函数,第二个参数为传入到当前域,该参数只当做第一个参数的当前域。通过创建函数系列可以在执行原函数之前执行一些其他操作。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |