我对each的方式,做了简单的定义:
string:each每个字符。汉字的话,前提是utf8编码,each每个字而不是半字。
object:如果length为number(意为数组或具有length属性可通过数字下标访问的集合),则each每个元素,否则,则each对象内部属性,each每个属性名。
number:从零开始,each到该数字-1。
需要注意的是:
1、为了更灵活,在对object进行属性轮巡时,我传给代理的是属性名而不是属性值
2、我将索引值作为第二个参数传了过去
3、在轮巡时监视代理方法的返回值,可以以此来中断轮巡。
each : function(obj, fun){
if(!obj || !fun) return;
var c, i;
switch(typeof obj){
case 'string':
for(c = 0; c < obj.length; c++) if(fun(obj.charAt(c), c)) return;
break;
case 'object':
if(typeof obj.length == 'number') {
for(c = 0; c < obj.length; c++) if(fun(obj[c], c)) return;
} else {
i = 0;
for(c in obj) if(fun(c, i++)) return;
}
break;
case 'number':
for(c = 0; c < obj; c++) if(fun(c)) return;
break;
}
c = null;
i = null;
}