【发布时间】:2012-08-09 15:17:27
【问题描述】:
在 JavaScript 中,有些对象伪装成数组(或“类数组”)。此类对象有arguments、NodeLists(从getElementsByClassName等返回)和jQuery对象。
当console.logged 时,它们显示为数组,但不是。我知道,为了像数组一样,对象必须具有length 属性。
所以我做了一个这样的“对象”:
function foo(){
this.length = 1;
this[0] = "bar";
}
var test = new foo;
当我console log(test) 时,我(如预期)得到一个foo 对象。我可以使用
Array.prototype.slice.call(test)
但是,我不想转换它,我希望它像数组一样。如何制作一个类似数组的对象,以便当它是console.logged 时,它会显示为一个数组?
我尝试设置foo.prototype = Array.prototype,但console.log(new foo) 仍然显示foo 对象,而不是数组。
【问题讨论】:
-
“我如何制作一个类似数组的对象,以便当它被 console.logged 时,它显示为一个数组?” 仅仅因为控制台没有显示它使用 Array 字面量语法或其他一些让您想到 Array 的语法,并不意味着它不是 "array-like"。控制台如何显示您的数据与该数据是什么无关。
-
@amnotiam,虽然这是真的,但在这种情况下,我发现协助控制台帮助我很有用。当我记录一个“类似数组”的对象时,我并不真正关心对象,而是关心它的内容。
-
@amnotiam:我只是有点好奇 jQuery 对象和
arguments是如何工作的。我想知道为什么它们被记录为数组。 :-P -
@zzzzBov:我不同意这一点。我只是说拥有“类似数组的对象”与某些控制台如何显示该对象之间存在区别。
-
@Rocket:我明白这一点。但这不是 jQuery 对象或
arguments的工作方式。这就是各种控制台的工作方式,可能彼此不同。可能是我对你上面那句话的理解有点曲解了。
标签: javascript arrays object