`

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

 
阅读更多
Ext对Function类的扩展主要包括方法:常见函数执行拦截器、创建回调函数、延迟函数执行。 
Java代码  
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;  
                };  
    }  
});  

 

分享到:
评论

相关推荐

    ExtJS3.2正式版

    ExtJS3.2正式版 货真价实 ExtJS3.2正式版

    ExtJs3.2+中文API

    ExtJs3.2+中文API 便于开发查找API 很方便

    ExtJS 3.2 聊天室程序(类Q_Q群)

    ExtJS 3.2 聊天室程序(类Q_Q群)

    extjs3.2资源压缩包

    extjs3.2 js+jsp实现功能,美化页面展现效果,方便快捷,

    ExtJs3.2官方原版

    这是官方原生态的ExtJs3.2版本,由于官方都是英文,可能有很多人不会下载,在这边就直接给出了。

    ExtJs 3.2 中文API帮助文档

    ExtJS是一种主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。功能丰富,无人能出其右。无论是界面之美,还是功能之强,ext的表格控件都... ExtJs 3.2 中文API帮助文档,CHM离线的,希望对大家有帮助

    ExtJS3.2的各种例子

    我收集了各种ExtJS的例子,有3.2还有2.5,还有所有“掏钱学ExtJS”的例子,绝对物超所值。

    extjs3.2 中文API 完整版

    网络上流传很多exjs 中文API,都神马东西,下载都没用。现在鄙人从脚本娃娃群分享的完整API上传分享给大家!

    ExtJS3.2列布局

    Ext3.2的列布局,排列方式,适用于form表单中一行几列的排序方式

    ExtJS3.2中文API与示例

    Ext3.2中文API及代码示例,经典的API翻译,丰富的代码示例 就在这里等着你下!

    Extjs3.2中文帮助手册

    Extjs 中文版 离线帮助手册,开发Extjs必备参考手册~~~

    ExtJS3.2资源包

    ExtJs3.2的资源包,需要的朋友可以下载

    extjs3.2api中文

    Ext3.2中文API, BLANK_IMAGE_URL : 图片路径:一张1×1的透明图片,Ext使用它来和CSS一起创建内嵌的图标。

    extjs-3.4和3.2版本和spket插件

    1.提供了extjs-3.2及extjs-3.4的离线包 2.提供了spket的eclipse插件包,plugins和features放入eclipse对应的目录中,启动eclipse即可 3.离线包中包含了ext.jsb2文件,可在eclipse的spket中进行相应的配置,方便开发...

    ExtJS 3.2 聊天室程序(类QQ群)

    技术:ExtJS 3.2 DWR 3.0 Struts 2.16 Spring 2.0 Hibernate 3.2 MySql 5.0 原文地址: http://yourgame.javaeye.com/blog/681537 火狐浏览器,谷歌浏览器测试通过. 讨论Q_群:91986229(群3) 76202406(群2) 62150370...

    EXTJS3.2-3.3中文API和包

    EXTJS3.3中文API和包EXTJS3.3中文API和包EXTJS3.3中文API和包EXTJS3.3中文API和包

    安装Extjs的插件spket,extjs3.2版.doc

    转-eclipse下安装Extjs的插件spket,extjs3.2版 转自:http://xiehx163.blog.163.com/blog/static/6146679620097281113653/ 最近项目要用ext进行开发,所以这段时间开始学习ext. 我这里用的是ext3.2,eclipse3.5。 每...

    ext 3.2源码

    方便ext js开发人员更深的理解其底层实现方式。

    extjs3.2中文API文档

    这是一个extjs3.2的中文API文档,可以用于学习。

    Learning ExtJS 3.2.pdf

    Learning ExtJS 3.2.pdf绝对的高清,不过是英文的,下载之前考虑好,不想骗你们的分,呵呵

Global site tag (gtag.js) - Google Analytics