国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

關(guān)于jQuery中的each方法(jQuery到底干了什么)

2024-05-06 16:02:07
字體:
供稿:網(wǎng)友
這篇文章主要介紹了關(guān)于jQuery中的each方法,需要的朋友可以參考下

1. 估計很多人都會用到j(luò)Query中的each方法。

那就來看一看jQuery都干了些什么。

找到j(luò)query中的each源碼:

復(fù)制代碼 代碼如下:


each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction( object );

if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}

// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
break;
}
}
}
}

return object;
},


這段代碼還是比較簡單的,應(yīng)該沒什么問題.

為了測試這個東西,我寫了下面一段js;

復(fù)制代碼 代碼如下:


$.each($(".demo"),function(){
console.log("show");
});


然后再加一段html:

復(fù)制代碼 代碼如下:


<a href=""></a>
<a href=""></a>
<a href=""></a>


然后拿著jQuery的源碼來調(diào)試,以為能得到正確的結(jié)果。可是很遺憾。

關(guān)于jQuery中的each方法(jQuery到底干了什么)

 
可以看到,這里的object竟然不是我所想要的那三個html對象,竟然是js內(nèi)置的8種數(shù)據(jù)類型。

之后在jquery的源碼中加了一段代碼:

復(fù)制代碼 代碼如下:


console.log(Object.prototype.toString(object));
console.log(length);


之后的輸入如下:

關(guān)于jQuery中的each方法(jQuery到底干了什么)

 
也就是說在文檔加載的時候,jQuery會用each遍歷dom對象,即使沒有使用

復(fù)制代碼 代碼如下:


$(function(){
});


當(dāng)遍歷指定對象之后,依舊會繼續(xù)冒泡遍歷父級元素。

2. 根據(jù)jQuery的源碼使用回調(diào)函數(shù)參數(shù)

復(fù)制代碼 代碼如下:


$.each($(".demo"),function(a,b){
console.log(a + "" + $(a).attr("class"));
})


從源碼可以看到:

復(fù)制代碼 代碼如下:


callback.call( object[ i ], i, object[ i++ ] )


最后都將當(dāng)前對象通過call方法傳遞給了回調(diào)函數(shù),那么就可以像上面一樣去使用當(dāng)前對象中的屬性。當(dāng)然也可以直接用this來調(diào)用。

如果說復(fù)雜些的東西,比如,這里我是將$(".demo")作為object傳遞進(jìn)去給$.each()

如里某些時候不是傳遞的jQuery或者h(yuǎn)tml對象。而是一個Object或者array。

而在array中又存在很多其它的object或者方法。

這樣就能弄出更多的效果。

3. 采用call或者apply實現(xiàn)回調(diào)模式.

從上面的代碼可以看到:

復(fù)制代碼 代碼如下:


callback.call(obj,args)


復(fù)制代碼 代碼如下:


callback.apply([obj],args)


之類的代碼,這里只需要傳遞callback函數(shù),就能實現(xiàn)自己調(diào)用,這對于提高代碼的復(fù)用程度用處不小。

但是也存在某些缺點,比如代碼可讀性降低,耦合程度增加等。

偶有所得,以記錄之,以防忘記!
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 盐边县| 娱乐| 竹山县| 丰镇市| 仁化县| 洪湖市| 西贡区| 鄂托克旗| 阿鲁科尔沁旗| 鄂伦春自治旗| 会理县| 桐梓县| 中方县| 樟树市| 汽车| 新晃| 东阳市| 平昌县| 乌拉特后旗| 博罗县| 玉田县| 宁乡县| 肃南| 光泽县| 博白县| 桦甸市| 仙游县| 舒城县| 灵璧县| 沁源县| 手游| 静乐县| 南皮县| 酒泉市| 驻马店市| 高邮市| 清远市| 长寿区| 蓬溪县| 南和县| 蓬溪县|