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

时间:2015-05-20 13:02:24

标签: javascript jquery

在Firebug 2.0.9中:

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

可是:

> function MyObject() {}
undefined
> new MyObject()
MyObject {}

注意 - 花括号而不是方形。为什么?似乎jQuery对象是JavaScript Array的“子类”。但它是如何完成的?

更新#0

我可以像这样实现方括号:

> MyObject.prototype = Array.prototype
[]
> new MyObject()
Object[]

有人能解释一下这个意思吗?

1 个答案:

答案 0 :(得分:0)

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

“类似数组的对象是可以交互的对象(sic),即具有索引(例如NodeList,DOMTokenList,$(...)返回的jQuery节点列表等)。 如果可以确定,则显示对象的类型,否则为“对象”,“ - https://getfirebug.com/wiki/index.php/Display_of_JavaScript_values_and_DOM_items

这里我通过添加Array.prototype的splice和length属性来模拟这个jQuery“类似于对象的对象”: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]"
相关问题