2011-07-29 17 views
4
var test = $(); 
test.push($('div')[0]); 

這是有效的。任何想法爲什麼? 因爲push是一個數組方法,所以我不明白爲什麼在這種情況下可以使用任何想法?爲什麼push方法在jQuery對象上工作?

由於您可以使用.add(),是否有實際用途?

+0

是'something'只是任意JavaScript對象?結果是什麼? – BoltClock

+0

@BoltClock我編輯了我的問題。 jquery的選擇得到擴展與div – meo

回答

3

他們從Array.prototype借用.push()

https://github.com/jquery/jquery/blob/1.6.2/src/core.js#L70

https://github.com/jquery/jquery/blob/1.6.2/src/core.js#L296

例子:http://jsfiddle.net/HgS2R/1/

var MyObj = function(){}; 
MyObj.prototype.push = Array.prototype.push; 

var inst = new MyObj; 

inst.push("test"); 

document.write(inst[ 0 ] + '<br>' + inst.length); // test, 1 

要知道,你的自定義構造函數的情況下,將不相同的行爲,以實際陣列。


編輯:

關於你的問題編輯,.push()不等同於.add()

.push()方法用於將DOM元素添加到現有的jQuery對象。

.add()方法可以接受一個DOM元素或另一個具有一個或多個DOM元素的jQuery對象,並且它會返回一個新的 jQuery對象並添加新元素。

它更像是一個.concat()

1

我檢查了源代碼並發現了這些代碼塊(帶註釋)。不知道是否他們回答你的問題:

// Save a reference to some core methods 
toString = Object.prototype.toString, 
hasOwn = Object.prototype.hasOwnProperty, 
push = Array.prototype.push, 
slice = Array.prototype.slice, 
trim = String.prototype.trim, 
indexOf = Array.prototype.indexOf, 
// For internal use only. 
// Behaves like an Array's method, not like a jQuery method. 
push: push, 
sort: [].sort, 
splice: [].splice 
+0

是的,它幫助謝謝你,但即時通訊仍然困惑他們爲什麼這樣做。 – meo

+1

@meo:這是一個免費的方法。他們希望在一組索引屬性的末尾添加一個項目,同時更新'.length',這就是.push()所做的。無需自己寫。 – user113716

相關問題