`

[ExtJS3.2源码每天一小时](5)ext-base.js中each与iterate方法(之五)

阅读更多
 //array:要循环的对象,fn循环处理函数,scope作用域
 each : function(array, fn, scope){
            //如果array中的元素为空,返回,不往下执行
            if(Ext.isEmpty(array, true)){
                return;
            }
            //如果array不是可迭代对象或者是JavasScript基本类型 string、number、boolean等,就将array放入一个数组中。
            if(!Ext.isIterable(array) || Ext.isPrimitive(array)){
                array = [array];
            }
            //循环array,执行fn循环函数,回调参数分别为作用域、当前被循环到的数组元素,当前循环到的数组下标、整个数组对象。至于为什么要return 一个 i,原因是如果使用者的目的是 遍历这个array,通过fn函数内部做处理,查找某个符合条件的元素,当找到时,可以return false,就可以退出each循环了,each函数返回的就是找到的元素的下标了。至于使用===是不转换类型比较,即恒等,即左右两边都是false才相等,不相等时不会去转变类型再去比较了。
            for(var i = 0, len = array.length; i < len; i++){
                if(fn.call(scope || array[i], array[i], i, array) === false){
                    return i;
                };
            }
        }




//Obj:要迭代的对象,fn:循环处理函数,scope:作用域
iterate : function(obj, fn, scope){
            //如果对象是空对象,那么直接返回,不作处理
            if(Ext.isEmpty(obj)){
                return;
            }
            //如果对象是可迭代的,那么直接调用each函数
            if(Ext.isIterable(obj)){
                Ext.each(obj, fn, scope);
                return;
            }
            //如果对象不可迭代,是一个Object的实例
            else if(typeof obj == 'object'){
                //遍历obj对象的属性
                for(var prop in obj){
                    //如果obj含所有的属性在自己本身,不在原型中
                    if(obj.hasOwnProperty(prop)){
                        //执行循环处理fn函数,回调参数分别为作用域,当前属性、当前属性对应的值,obj对象,至于为什么return原因类似each函数,但是它并没有return prop ,可能仅仅是为了减少循环次数,找到需要的就跳出循环吧。
                        if(fn.call(scope || obj, prop, obj[prop], obj) === false){
                            return;
                        };
                    }
                }
            }
}




上面这两个方法,一般数组等集合对象用each,普通对象用iterate
分享到:
评论
1 楼 clskkk2222 2012-03-20  
博主辛苦 感谢分享

相关推荐

    ext 2 简单例子(内附ext-all.css, ext-base.js, ext-all.js三个必不可少的文件)

    ext 是 ExtJs 的简称,是一个强大的js 类库。本资源主要包括三个大的文件ext-all.css,ext-base.js,ext-al.js。在引用ext 类库的时候,这三个文件必不可少。另外我还提供了ext2的一个简单例子,以便大家学习交流。

    extjs-basex.js

    extjs-basex.js extjs-basex.js extjs-basex.js

    ext-4.2.1.883.jsb2

    从spket IDE 官网下载。 文件名: ext-4.2.1.883.jsb2 对应版本ext-4.2.*版本。spket自动提示ExtJs4,需要ext4.2.1.jsp2文件。

    ExtJS入门教程

    &lt;script type="text/javascript" src="extjs3.2/adapter/ext/ext-base.js"&gt; &lt;script type="text/javascript" src="extjs3.2/ext-all-debug.js"&gt; &lt;script type="text/javascript" src="extjs3.2/ext-lang-zh_...

    ext-2.2.zip

    在CDH使用oozie 的时候需要安装ext-2.2.zip; 新增和改进的功能包括: 1、FileUploadField 文件上传 体验例子见:http://extjs.com/deploy/dev/examples/form/file-upload.html 2、GMapPanel GMap扩展 体验...

    Extjs 6.2 最新sdk ext-6.2.0-gpl.zip

    官方最新版本Extjs6.2版本sdk,创建新项目的时候需要用, 全面的核心框架,具有最新的Javascript标准支持 新的漂亮组件和主题,以创建漂亮的企业应用程序 现代工具链,用于构建优化,高性能,通用的应用程序 用于可视...

    ext-7.0.0-gpl.zip

    ext-7.0.0-gpl.zip

    ext-lang-en.js和ext-lang-zh_CN.js

    Extjs中实现国际化要用到的文件ext-lang-zh_CN.js和ext-lang-en.js

    ext-3.3.1.rar

    extjs ajax 框架 extjs ajax 框架extjs ajax 框架

    ext-4.2.0.663 EXTJS官方最新版7z压缩

    ext-4.2.0.663 EXTJS官方最新版7z压缩 为了上传方便,使用了7z极限压缩,解压时请使用7z,以防文件损坏

    ext-all.js

    extjs3.3 格式化好的ext核心文件

    ext-3.2.0.7z

    ext-3.2.0.7z

    ext-5.1.0.jsb2

    从spket IDE 官网下载。 文件名: ext-5.1.0.jsb2 对应版本ext-5.1.*版本。spket自动提示ExtJs5,需要ext-5.1.0.jsb2文件。

    Extjs3.4+Ext-core.pdf+轻松搞定Extjs.pdf

    Extjs3.4 Ext-core.pdf 轻松搞定Extjs.pdf Extjs学习笔记 里面有3.4的开发包,附属:Ext-core.pdf 轻松搞定Extjs.pdf Extjs学习笔记

    Spket_ExtJS提示工具ext-core-dev.js.zip

    软件介绍: Spket的ExtJS提示工具,内附需要加入ExtJS的提示内容文件ext-core-dev.js ,所需要的都整合为一个压缩包,一步到位直接使用。featurespluginsext-core-dev.js

    extjs jsb文件(ext-4.2.1.883.jsb2)

    从ext官方论坛上下的。 文件名: ext-4.2.1.883.jsb2 对应版本ext-4.2.1.883

    ext-4.2.1.883.zip

    extjs4.2.1.883 差不多是extjs 4.0 版本中非常靠后的版本了。在这个大版本下最稳定的版本了。

    ext-4.2.1-gpl.zip

    ExtJs4环境,不包括例子,太大了没法上传

    extjs-Ext.ux.form.LovCombo下拉框

    extjs多选下拉框,Ext.ux.form.LovCombo,extjs 以修复多选下拉框火狐下取不到值的问题,火狐下div不显示背景色的问题

    ext-4.2.1-gpl.7z

    ext-4.2.1-gpl.7z

Global site tag (gtag.js) - Google Analytics