分析jQuery中的each方法

2022-03-29 05:01:15 字數 1275 閱讀 9525

在看jquery原始碼是怎麼實現each方法之前,我們看一下js的原生實現。

ecmascript 5為陣列定義了乙個foreach方法,該方法接受兩個引數:第乙個引數是要在每乙個陣列項上執行的函式,第二個引數是執行該函式的作用域物件。第二個引數為非必填。作為第乙個引數的執行函式接受三個引數,分別是:陣列項的值、該項在陣列中的位置、陣列本身。示例**如下:

var aa = [1,2,3]

aa.foreach(

function

(item, index, array))

原生的方法,效率應該沒問題。但是我們仔細一想,這個原生方法可能不太適合用在我們的實際開發中。因為實際開發中我們經常會遇到滿足某個條件跳出迴圈的情況。不能夠break,這是原生方法的硬傷。怎麼辦?我們結合ecmascript 5的定義自己寫乙個試試,並且讓它也適應於物件。我寫的大體**如下:

function

foreach( 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...