【发布时间】:2012-01-09 18:05:12
【问题描述】:
我有另一个关于 jQuery 架构的问题。 $('div') 构造一个新的jQuery 对象:
$('div') instanceof jQuery; // true
我想知道为什么可以像数组一样查询它,尽管它不是数组?
$('div')[0]; // returns the first div in the document as a DOM node.
$.isArray($('div')); // false
我就是喜欢这种语法,它看起来很干净!我还注意到这会将 DOM 节点作为数组返回:
console.log($('div'));
谁能解释我如何对我自己的对象实现这种行为?
我自己的方法是用这样的一些方法制作一个数组:
var a = ['a', 'b', 'c'];
a.method = function(){ return 'test'; };
a; // ['a', 'b', 'c']
a[0]; // 'a'
a.method(); // 'test'
然而这似乎不是 jQuery 的做法,因为这实际上是一个数组:
$.isArray(a); // true
我想知道 jQuery 是如何学习的,看看它是否比我的更好。
【问题讨论】:
-
您可以使用
[ ]表示法访问 any 属性。不仅仅是指数。所以就像$('div')[0],你可以做$('div')['jquery'],它会给你jQuery的版本号。 -
@amnotiam 我知道。但是当我在控制台中打印普通对象时,它们不会输出数组。
-
啊,如果您专门询问控制台输出,那么实际上只是控制台对您给出的内容做出了最佳猜测。 jAndy's answer 展示了控制台通常会做什么。
-
示例:
console.log({"2":"foo",splice:function(){},length:2});显然不是正在记录的数组,而是显示为[undefined, undefined, "foo"]
标签: javascript jquery