在Firebug 2.0.9中:
> $('div')
Object[div.constrain, div#container, div#logo-events.constrain.clearfix, ...]
可是:
> function MyObject() {}
undefined
> new MyObject()
MyObject {}
注意 - 花括号而不是方形。为什么?似乎jQuery对象是JavaScript Array的“子类”。但它是如何完成的?
我可以像这样实现方括号:
> MyObject.prototype = Array.prototype
[]
> new MyObject()
Object[]
有人能解释一下这个意思吗?
答案 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]"