If you do console.log($('some selector'))
in the browser, it returns what looks like an array (first line):
But notice that it's not an instanceof Array
, but it's actually the jQuery
object.
When you do console.dir($('h1'))
, it shows it's actually the jQuery object.
The question is, how are they making it look like it's an array in the web console? I noticed in the jQuery source here they add reference to a few Array and Object methods, and here they add toArray
(and slice and others) to the jQuery
object. Is the web console somehow checking for these methods and if it finds one (toArray
, indexOf
, slice
, etc.), it prints it as an Array? I would like to get this behavior out of any custom object, such as the Ember.ArrayProxy
. Currently when you log the Ember.ArrayProxy
it shows > Object
or whatever, but it would be nice to show it as an array.
Any ideas?
You make your object inherit Array
using the prototype, like so:
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]
And, of course, all jQuery objects are instances of the jQuery
function/constructor, so that's how jQuery does it. As a bonus, because of the inheritance, you get all the methods from Array
, and the indexing that comes with it too!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With