$(’h1’)如何在jQuery中作为数组登录到Web控制台?

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

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

但请注意,它不是instanceof Arrayinstanceof Array ,但它实际上是jQuery对象 。

当你执行console.dir($('h1')) ,它显示它实际上是jQuery对象。

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

有任何想法吗?

您使用原型使对象inheritanceArray ,如下所示:

 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就是这样做的。 作为奖励,由于inheritance,您可以从Array获取所有方法,以及随附的索引!