在firebug下面用console.debug($(‘a’))打印jQuery()返回值时,会发现控制台输出是一个数组,但我们知道jQuery()返回的确实一个对象,只不过这个对象有length属性和数字的下标,最重要的是还有一个splice方法。只要满足这三点,就会在控制台输出一个数组。自己建了个例子模拟一下。
function Foo() {
return new Foo.prototype.init();
}
Foo.prototype = {
init: function() {
this.length = 1;
this[0] = 'hello world';
return this;
},
say: function() {
alert('hi');
},
length: 0,
splice: [].splice
}
Foo.prototype.init.prototype = Foo.prototype;
Foo();
PS: 如果想用firebug打印完整的jQuery对象,请用console.dir()。
作者:周明智
[本站团队成员原创文章,转载请注明来源,并保留链接地址,谢谢]
确切的说,返回的是一个JSON对象,length只是属性,标识筛选字串匹配的HTML对象数量.
jQuery 很厉害。
明智兄挺细心的!
我建议你再看看源码, length是怎么来的,,
splice是那样追加的, 但这不是js 对象拥有 数组特性的原因。
可以给你个提示, 看js select到结果后是怎么追加到jq对象里的, 我想是push吧。。。。
var c = {};
c.push = [].push;
c.push(‘hehe’);
再看。。。一切明了。先有鸡还是先有蛋就已经很清楚了。
你说的没错,不过我这里是在说firebug控制台的问题,例子中的length和下标都是随便加进来用来模拟的。