ext-base.js中each与iterate方法(转)
2012-04-14 18:33
239 查看
//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
相关文章推荐
- 拒绝访问ext-base.js解决方法
- require.js使用baseUrl + paths导入文件配置的3种方法
- EXT.NET_X.Js.Call方法
- Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据
- Ext.js5表单—(triggers触发器)(baseCSSPrefix)(specialkey)利用Ext.js提供的框架创建自己的表单(查询表单)(51)
- [ExtJS5学习笔记]第十三节 Extjs5的Ext.each方法学习
- Array.ForEach 用法 还颇像js的each()方法
- Ext JS Grid在IE6 下宽度的问题解决方法
- EXT.NET_X.Js.Call方法
- Ext.Net Js调用WebService方法以json对象传递参数
- js模版引擎handlebars.js实用教程——each-基本循环使用方法
- js 的each()方法遍历对象和数组
- 时间方法 base.js
- Ext js call方法
- ext js renderer的使用方法
- JS中利用jquery 获得class 进行判断 for循环和each两种方法
- Jquery 模板插件 jquery.tmpl.js 的使用方法(2):嵌套each循环,temp调用(使用预编译的模板缓存)
- Ext.each 中途跳出得方法
- EXT 瘦身方法 之 压缩.js文件