2012-02-23 63 views
2

可能重複:
What makes a jQuery object show up as an array in Chrome's Developer Tools?jQuery對象內部轉換爲JavaScript數組,我該如何複製該行爲?

我寫一個非常小的,jQuery的一樣,DOM的JavaScript包裝,只包含我最需要的(少數)功能。我注意到,當我將jQuery對象記錄到瀏覽器的控制檯時,該對象實際上是一個數組。例如:[Document]。我想複製該行爲。任何人都可以向我解釋jQuery如何在內部執行此操作,或者甚至可以更好地指向jQuery源代碼中的相關行? 我知道JavaScript中的對象和數組有很多共同之處,但是jQuery似乎爲$選擇返回true數組,而不是對象。 我已經閱讀計算器以下職位,但它似乎並沒有回答我的問題:

Are javascript Arrays actually implemented as arrays?

+0

謝謝你們,兩個鏈接都包含答案(某處)。我已經在下面跟隨了謝爾蓋的建議,並注意到長度和拼接原型成員的存在爲Chrome(以及Firefox和Firefox)帶來了不同。因此我已經標記了這個答案。 – Jeroen 2012-02-23 10:57:13

回答

3

神奇的是在存在:

  • 長度
  • 拼接

原型對象成員。開發控制檯打印實現這兩個成員的對象,就好像它們是數組一樣。

var myArray = function() {}; 
myArray.prototype.length = 0; 
myArray.prototype.splice = function(){}; 

console.log(new myArray) 
1

一個jQuery對象是具有length屬性和屬性數值名稱只是一個普通的JavaScript函數對象,加上從Array.prototype借用的其他方法(以及許多jQuery特定的方法)。它不會從Array.prototype繼承。你可以看到這個(從http://code.jquery.com/jquery-latest.js拍攝)jQuery的未壓縮源附近開始:

// Define a local copy of jQuery 
var jQuery = function(selector, context) { 
    // The jQuery object is actually just the init constructor 'enhanced' 
    return new jQuery.fn.init(selector, context, rootjQuery); 
}, 

瀏覽器遊戲機檢查對象爲是類似數組通過檢查數組屬性的存在。例如,Firebug會檢查一個length屬性和一個splice()方法,它們都是jQuery對象的方法。可以看到splice()方法在源進一步向下,可能只有加到說服瀏覽器控制檯顯示jQuery的對象作爲數組:

// For internal use only. 
// Behaves like an Array's method, not like a jQuery method. 
push: push, 
sort: [].sort, 
splice: [].splice 
+0

長度屬性不足。查看重複問題的答案。 – Quentin 2012-02-23 10:21:56

+0

@Quentin不適合在控制檯中顯示爲數組,是的。我沒有真正試圖解決這個問題,但我會更新。 – 2012-02-23 10:27:38

+0

具有數字命名屬性也不足。 – Quentin 2012-02-23 10:28:32

相關問題