[ExtJS3.2源码每天一小时]ExtJS对Function类的扩展(之九)

Ext对Function类的扩展主要包括方法:常见函数执行拦截器、创建回调函数、延迟函数执行。

Ext.apply(Function.prototype, {
//函数执行拦截器 fcn-拦截器函数
createInterceptor: function(fcn, scope){
//this指代当前要加拦截器的function 下文简称this函数
var method = this;
//判断当前fcn拦截器是否是一个函数,如果是返回的是执行拦截器和this函数的一个新函数,如果不是返回的是this函数。
return !Ext.isFunction(fcn) ?
this :
//下面这个function称作deal函数(依次执行拦截函数和this函数)
function() {
//此处的this指的是deal函数
var me = this,
//arguments指代deal函数的参数
args = arguments;
//设置拦截器的拦截目标为deal函数
fcn.target = me;
//设置拦截器的正常方法为this函数
fcn.method = method;
//首先执行拦截器,如果拦截器不返回false,那么继续执行this函数,如果拦截器返回false,那么this函数将不执行。
return (fcn.apply(scope || me || window, args) !== false) ?
method.apply(me || window, args) :
null;
};
},
//创建function特定参数的回调函数
createCallback: function(){
var args = arguments,
method = this;
return function() {
return method.apply(window, args);
};
},
//创建function指定参数的回调函数
//obj指代的是作用域
//args指代的是要回传给执行函数的参数,一旦指定args,并且appendArgs不传,那么就覆盖原有函数的参数;
//appendArgs可以传两种类型 布尔值:代表是否追加参数 数字值:代表追加的位置
createDelegate: function(obj, args, appendArgs){
//保存当前函数的引用
var method = this;
return function() {
//声明回调时传入的参数
var callArgs = args || arguments;
//是否追加参数,即createDelegate传的args参数是否追加到当调用回调函数时传入的参数数组里面
if (appendArgs === true){
//先将回调函数的参数转为数组形式,因为arguments并不是一个数组
callArgs = Array.prototype.slice.call(arguments, 0);
//将args参数追加到回调参数中
callArgs = callArgs.concat(args);
}
//如果appendArgs是数字
else if (Ext.isNumber(appendArgs)){
//先将回调函数的参数转为数组形式,因为arguments并不是一个数组
callArgs = Array.prototype.slice.call(arguments, 0);
//从appendArgs位置向callArgs插入args参数
var applyArgs = [appendArgs, 0].concat(args);
Array.prototype.splice.apply(callArgs, applyArgs); // splice them in
}
//执行函数
return method.apply(obj || window, callArgs);
};
},
//延迟执行函数
//millis:延迟执行的毫秒数
//obj:作用域
//args:创建回调函数的参数
//appendArgs:是否追加参数
defer: function(millis, obj, args, appendArgs){
//创建回调函数
var fn = this.createDelegate(obj, args, appendArgs);
//应用延迟
if(millis > 0){
//millis后执行fn
return setTimeout(fn, millis);
}
//如果millis小于零或者是其他非数字值,直接执行fn
fn();
return 0;
},
//创建函数之后顺序执行的一个函数
createSequence : function(fcn, scope){
var method = this;
return (typeof fcn != 'function') ?
this :
function(){
var retval = method.apply(this || window, arguments);
fcn.apply(scope || this || window, arguments);
return retval;
};
}
});

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值