为什么push方法适用于jQuery对象?

时间:2011-07-29 00:51:14

标签: javascript jquery

var test = $();
test.push( $('div')[0] );

这很有效。知道为什么吗? 由于push是一个数组方法,我不明白为什么这个在这种情况下工作,任何想法?

是否有实际用途,因为你可以使用.add()?

2 个答案:

答案 0 :(得分:3)

他们从.push()借用Array.prototype

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元素或具有1个或多个DOM元素的另一个jQuery对象,并返回添加了新元素的 new jQuery对象。

它更像是.concat()

答案 1 :(得分: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