当我在jQuery中开发时,我经常发现自己在Chrome/Firebug控制台中键入选择器并查看它们给我的内容.它们总是很好地格式化,就像它们是数组一样:

我试图找出使控制台将对象视为数组的原因.例如,以下自定义对象不被视为数组:
function ElementWrapper(id) {
this[0] = document.getElementById(id);
}
Run Code Online (Sandbox Code Playgroud)

如果我然后添加length属性和splice方法,它神奇地用作数组,任何具有整数键的属性被视为数组的成员:
function ElementWrapper(id) {
this[0] = document.getElementById(id);
this.length = 1;
this.splice = Array.prototype.splice;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我的问题是:什么决定控制台是否将对象显示为数组?它是否有任何基本原理,或者它是完全随意的"如果一个对象具有这些属性,它必须是一个数组?" 如果是这样,决定性的属性是什么?
我试图重现jQuery的(1.7.1)对象结构,以更好地理解它是如何工作的.我有以下代码:
(function (window, undefined) {
var document = window.document,
navigator = window.navigator,
location = window.location;
window.myclass = (function () {
var __con = function () {
return new __con.fn.init();
}
__con.fn = __con.prototype = {
'init' : function () {
return this;
},
'test' : function () {
console.log('test1');
return this;
}
}
__con.fn.init.prototype = __con.fn;
__con.test = function () {
console.log('test2');
return this;
}
return __con;
})();
})(window);
Run Code Online (Sandbox Code Playgroud)
我的控制台看起来像这样:
> myclass().test();
test1
< __con.fn.__con.init
> myclass.test();
test2
< function …Run Code Online (Sandbox Code Playgroud)