在看jquery原始碼是怎麼實現each方法之前,我們看一下js的原生實現。
ecmascript 5為陣列定義了乙個foreach方法,該方法接受兩個引數:第乙個引數是要在每乙個陣列項上執行的函式,第二個引數是執行該函式的作用域物件。第二個引數為非必填。作為第乙個引數的執行函式接受三個引數,分別是:陣列項的值、該項在陣列中的位置、陣列本身。示例**如下:
var aa = [1,2,3]aa.foreach(
function
(item, index, array))
原生的方法,效率應該沒問題。但是我們仔細一想,這個原生方法可能不太適合用在我們的實際開發中。因為實際開發中我們經常會遇到滿足某個條件跳出迴圈的情況。不能夠break,這是原生方法的硬傷。怎麼辦?我們結合ecmascript 5的定義自己寫乙個試試,並且讓它也適應於物件。我寫的大體**如下:
functionforeach( object, callback, context )
} else
}}
函式的第乙個引數是要迴圈的陣列或物件,第二個引數是每項要執行的函式,第三項為非必填,為函式執行的作用域物件。這裡主要的變化就是當執行函式返回false時,即跳出迴圈。
還有就是在迴圈物件的時候加了乙個object.hasownproperty的判斷,以保證是例項中的屬性而不是原型中的。
現在我們再看下jquery對each方法的實現,比較一下和我們寫的有什麼不同。**如下:
each: function( obj, callback, args ) }}
else}}
} else}}
else}}
}return
obj;
}
我們看到jquery實現的each方法的第乙個引數也是要迴圈的陣列或物件,第二個引數也是每項要執行的函式。不同的是:
a、這裡的第三個引數並不是執行該函式的作用域物件。從**中看這裡的args,是傳給執行函式的引數。這種用法不常用,呼叫時一般用不到args。
b、迴圈陣列或物件的每一項的值作為了執行函式的作用域物件,即執行函式裡的this指向了obj[i]。
c、執行函式引數的順序有所不同,變成了先是」該項在陣列中的位置「,再是」項的值「了。我覺得還是先有value 再有 index(或key)會好一些。
d、在迴圈物件時沒有進行hasownproperty的判斷,這個到底有沒有必要那?請高手指點一下!3q。
e、還有就是jquery最後返回了要迴圈的物件。
jQuery中的attr 方法和each 方法
返回被選元素的屬性值。selector attr attribute 引數 描述attribute 規定要獲取其值的屬性。設定被選元素的屬性和值。selector attr attribute,value 引數 描述attribute 規定屬性的名稱。value 規定屬性的值。each 方法規定為每...
jQuery中each的用法
each函式根據引數的型別實現的效果不完全一致 1 遍歷物件 有附加引數 each object,function p1,p2 引數1 引數2 2 遍歷陣列 有附件引數 each array,function p1,p2 引數1 引數2 3 遍歷物件 沒有附加引數 each object,funct...
jQuery中 each的用法
jquery中通過 each,你可以遍歷物件 陣列的屬性值並進行處理。使用說明 1 遍歷物件 有附加引數 each object,function p1,p2 引數1 引數2 2 遍歷陣列 有附件引數 each array,function p1,p2 引數1 引數2 3 遍歷物件 沒有附加引數 e...