jQuery 源碼中大量push.call();splice.call();

在jQuery源碼的變量定義中,其定義了許多數(shù)組方法變量;

var arr = [];

var document = window.document;

var getProto = Object.getPrototypeOf;

var slice = arr.slice;

var concat = arr.concat;

var push = arr.push;

var indexOf = arr.indexOf;

其中slice,concat,push,indexOf都是數(shù)組的自有方法,
可是為什么jQuery中大量使用push.call(a,b),而不是a.push(b)來進(jìn)行數(shù)組操作呢?
我們稱呼第一種方式為方式一,第二種為方式二

當(dāng)使用第二種方式時必須保障a必須是數(shù)組;
而第一種方法可以讓類數(shù)組對象使用數(shù)組對象獨有的方法。

push方法如下

var test = {
    0:0,
    1:1,
    length:2
}

push.call(test,2);
console.log(test); //Object { 0: 0, 1: 1, 2: 2, length: 3 } 

//可以看到push方法將3,添加到了test中,而且test是非數(shù)組對象。

slice方法如下

var test = {
    0:0,
    1:1,
    length:2
}


console.log(slice.call(test));  //Array [ 0, 1 ]



//在此方法中,slice方法將一個對象,變成了數(shù)組;

//(test的屬性key值要為數(shù)字而且從零連續(xù),否則不會出現(xiàn)在返回數(shù)組中);

indexOf


var test = {
    0:0,
    1:1,
    2:3,
    length:3,

    test:"name"
}


console.log(indexOf.call(test,3));  //2

在研究jQuery源碼的過程中我理解了為什么jQuery,要經(jīng)常使用這種方式來處理。
這就要從 $() 說起,$.("selectoer")返回一個類數(shù)組對象,而且jQuery內(nèi)部,大量使用這種類數(shù)組對象,
為了方便操作類數(shù)組對象,所以jQery要經(jīng)常用到這種技巧。


var test = {

    0:0,

    1:1,

    2:3,

    length:3,

  splice:function(){}

}

console.log(test);  //[1,2,3]

ps:chrome瀏覽器的調(diào)試期會將特定的類數(shù)組對象,顯示為數(shù)組,會混淆。

一定要注意,調(diào)試js本人認(rèn)為火狐自帶很好用;

chrome調(diào)試器這個特性耽誤了我很長時間去理解jQuery對象的結(jié)構(gòu)。

在chrome中$('selector')顯示為數(shù)組。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的 JavaScript 類型 使用基本類型和基本包裝類型 引用類型的...
    悶油瓶小張閱讀 781評論 0 0
  • 一、JS前言 (1)認(rèn)識JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,932評論 0 8
  • 美好的一天又開始了,呼吸著清新的空氣,迎著朝陽,賞著美景,哼著歌兒,走進(jìn)校園。 第一節(jié)給六班上了一節(jié)《一件幸福的事...
    夏花靜秋閱讀 639評論 2 8
  • 乘風(fēng)破浪會有時,直掛云帆濟滄海。我想這句話也許是這部電影的寫照,人生哪有什么好壞之分,你身處其境,也許選擇無二,做...
    逃之遙遙閱讀 215評論 0 0

友情鏈接更多精彩內(nèi)容