Javascript 为什么jQuery对象显示在带方括号的Firebug中?

Javascript 为什么jQuery对象显示在带方括号的Firebug中?,javascript,jquery,Javascript,Jquery,在Firebug 2.0.9中: > $('div') Object[div.constrain, div#container, div#logo-events.constrain.clearfix, ...] 但是: 注意-用大括号代替正方形。为什么?jQuery对象似乎是JavaScript数组中的“子类”。但这是如何做到的呢 更新#0 我可以实现这样的方括号: > MyObject.prototype = Array.prototype [] > new MyObjec

在Firebug 2.0.9中:

> $('div')
Object[div.constrain, div#container, div#logo-events.constrain.clearfix, ...]
但是:

注意-用大括号代替正方形。为什么?jQuery对象似乎是JavaScript数组中的“子类”。但这是如何做到的呢

更新#0 我可以实现这样的方括号:

> MyObject.prototype = Array.prototype
[]
> new MyObject()
Object[]
有人能解释一下吗?

在firebug中,当你看到“Object[]”时,是因为它是一个“类似数组的对象”

“类似数组的对象是可以交互(sic)的对象,即具有索引(例如,NodeList、DOMTokenList、由$(…)返回的jQuery节点列表等)。 如果可以确定对象的类型,则显示对象的类型,否则为“对象”

在这里,我通过添加array.prototype的拼接和长度属性来模拟这个jQuery“array-like-object”:object[li,li,li]

//array of three "li" items : 
var items = document.getElementsByClassName("people")[0].childNodes;

var a = {splice:function(){}}; //  Object { splice=function()}
var j = 0;
for (var i = 0; i < items.length; i++) {
    if (items[i].nodeType == 3) { // type 3 = textnodes
        continue;
    }
    a[j] = items[i];  // "a" is "Object {...}"
    j++;
}
a.length = j;   // now "a" is "Object[li, li, li]"
//三个“li”项的数组:
var items=document.getElementsByClassName(“人”)[0].childNodes;
var a={splice:function(){};//对象{splice=function()}
var j=0;
对于(变量i=0;i
Jquery在普通dom元素周围应用包装器。它可以用方括号显示。您可以使用$('div')[0]打破包装,也可能只是firebug显示。我只是在我的firefox控制台(不是firebug)中执行了这个操作,jquery选择器返回了对象{…}
//array of three "li" items : 
var items = document.getElementsByClassName("people")[0].childNodes;

var a = {splice:function(){}}; //  Object { splice=function()}
var j = 0;
for (var i = 0; i < items.length; i++) {
    if (items[i].nodeType == 3) { // type 3 = textnodes
        continue;
    }
    a[j] = items[i];  // "a" is "Object {...}"
    j++;
}
a.length = j;   // now "a" is "Object[li, li, li]"