13

如果您console.log($('some selector'))在浏览器中执行此操作,它会返回一个看起来像数组的内容(第一行):

图片来自 Github 项目页面上最新版本的 chrome web 控制台

但请注意,它不是 a instanceof Array,而是实际上jQueryobject

当你这样做时console.dir($('h1')),它表明它实际上是 jQuery 对象。

问题是,他们如何让它看起来像是 Web 控制台中的一个数组?我注意到这里的 jQuery 源代码中他们添加了对一些 Array 和 Object 方法的引用,并且在这里他们向对象添加了toArray(以及 slice 和其他方法)jQuery。Web 控制台是否以某种方式检查这些方法,如果找到一个(、、、toArrayindexOfslice,它会将其打印为数组?我想从任何自定义对象(例如Ember.ArrayProxy. 当前,当您记录Ember.ArrayProxy它显示的内容> Object或其他内容时,最好将其显示为数组。

有任何想法吗?

4

1 回答 1

15

Array您使用原型使您的对象继承,如下所示:

function SomeType() {
    this.push(16);
}

SomeType.prototype = [];
SomeType.prototype.constructor = SomeType; // Make sure there are no unexpected results

console.log(new SomeType()); // Displays in console as [16]

当然,所有 jQuery 对象都是jQuery函数/构造函数的实例,所以 jQuery 就是这样做的。作为奖励,由于继承,您可以从 中获得所有方法Array,以及随之而来的索引!

于 2012-05-26T02:09:13.917 回答