当然,这里面还需要另外一个抽象出来的函数,来处理 for 循环,就是我们的 each 函数了。顺路在 flatten 中,带出这个 each 函数吧,学习了 jQuery 的做法,加入原生支持;当然,还可以处理纯对象,而不仅仅是数组: 复制代码 代码如下: each: function (callback, bind) { var isObject = arale.typeOf(this.obj) === "object", i = 0, key;
if (isObject) { var obj = this.obj; for (key in obj) { if (callback.call(bind, key, obj[key]) === false) { break; } } } else { var arr = this.obj; if (Array.prototype.forEach) {
// 用户 return false; 的时候还会继续执行 // 原生的很囧,去还是舍呢? marked TODO; return [].forEach.call(arr, callback, bind); }; for (var value = arr[0], length = arr.length; i < length && callback.call(bind, i, value) !== false; value = arr[++i]) {}; } }