麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 20:59:36
字體:
來源:轉載
供稿:網友
1. 估計很多人都會用到jQuery中的each方法。

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

找到jquery中的each源碼:
復制代碼 代碼如下:

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;
},

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

為了測試這個東西,我寫了下面一段js;
復制代碼 代碼如下:

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

然后再加一段html:
復制代碼 代碼如下:

<a href="" class="demo"></a>
<a href="" class="demo"></a>
<a href="" class="demo"></a>

然后拿著jQuery的源碼來調試,以為能得到正確的結果。可是很遺憾。
 
可以看到,這里的object竟然不是我所想要的那三個html對象,竟然是js內置的8種數據類型。

之后在jquery的源碼中加了一段代碼:
復制代碼 代碼如下:

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

之后的輸入如下:
 
也就是說在文檔加載的時候,jQuery會用each遍歷dom對象,即使沒有使用
復制代碼 代碼如下:

$(function(){
});

當遍歷指定對象之后,依舊會繼續冒泡遍歷父級元素。

2. 根據jQuery的源碼使用回調函數參數
復制代碼 代碼如下:

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

從源碼可以看到:
復制代碼 代碼如下:

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

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

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

如里某些時候不是傳遞的jQuery或者html對象。而是一個Object或者array。

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

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

3. 采用call或者apply實現回調模式.

從上面的代碼可以看到:
復制代碼 代碼如下:

callback.call(obj,args)

復制代碼 代碼如下:

callback.apply([obj],args)

之類的代碼,這里只需要傳遞callback函數,就能實現自己調用,這對于提高代碼的復用程度用處不小。

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

偶有所得,以記錄之,以防忘記!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩视频一二区 | 久色精品| 国产精品午夜一区 | 蜜桃网站在线 | 精品国产一区二区三区四区在线 | 国产精品一区二区免费在线观看 | 九九热视频免费在线观看 | 视频一区免费观看 | 91精品最新国内在线播放 | 中文字幕在线观看国产 | 青青操精品| 久草视频国产在线 | 海外中文字幕在线观看 | 欧美成人亚洲 | 成年性羞羞视频免费观看无限 | 黄色av网站免费 | 欧美激情天堂 | 澳门一级淫片免费视频 | 少妇一级淫片高潮流水电影 | 在线观看中文字幕av | 久久久久久麻豆 | 小视频成人 | 禁漫天堂久久久久久久久久 | 一级成人在线 | 销魂美女一区二区 | 久久丝袜脚交足黄网站免费 | 斗罗破苍穹在线观看免费完整观看 | 精品在线观看一区二区 | 国产精品久久久久影院老司 | 男女一边摸一边做羞羞视频免费 | 免费激情网址 | 草久视频在线观看 | 婷婷久久青草热一区二区 | 精品一区二区视频在线观看 | 久久精品一区二区三区国产主播 | 国产乱一区二区三区视频 | 高清成人在线 | 精品国产一二区 | 国产精品观看在线亚洲人成网 | 国产91丝袜在线熟 | 国产色91|