# Lesson-4
===
這個版本我們要增加一個用的非常多的方法!
那就是each!
我們知道each不僅能遍歷數組,還能遍歷對象.
首先我們需要一個對數組進行驗證的方法
```javascript
function isArray(obj) {
return Array.isArray(obj);
}
```
接著就是我們的重頭戲
```javascript
Kodo.each = function(obj,callback) {
var len = obj.length,
constru = obj.constructor,
i = 0;
if(constru === window.f) {
for (; i < len; i++) {
var val = callback.call(obj[i],i,obj[i]);
if(val === false) break;
}
} else if (isArray(obj)) {
for (; i < len; i++) {
var val = callback.call(obj[i],i,obj[i]);
if(val === false) break;
}
} else {
for( i in obj ) {
var val = callback.call(obj[i],i,obj[i]);
if(val === false) break;
}
}
};
```
因為我們還可能遍歷Kodo數組對象
如
```javascript
f("div").each(function(index,item) {
})
```
所以還需要一個判斷 是否是Kodo數組對象
```javascript
if(constru === window.f) {
for (; i < len; i++) {
var val = callback.call(obj[i],i,obj[i]);
if(val === false) break;
}
}
```
在這應該強調下call的用法,還是很多人不知道call何時使用.
在我們的callback里 第一個參數是下標,第二個參數是當前的對象,然后this還要指向他自己
所以 `callback.call(obj[i],i,obj[i]);` 就是這樣寫 第一個參數是改變this指向,第二個參數是下標,第三個是自己本身
很簡單不是嗎?
既然你都看到這里了,還不給我一個star?!