How does a jQuery instance appear as an array when called in console.log?

一世执手 提交于 2019-12-30 05:22:37

问题


When entered into a JavaScript console, a jQuery object appears as an array. However, it's still an instance of the jQuery object.

var j = jQuery();
=> []
console.log(j);
=> []
console.log('test with string concat: ' + j);
=> test with string concat: [object Object]
j instanceof Array
=> false
j instanceof jQuery
=> true

How could one duplicate this with their own object?

--------- EDIT ---------

Thanks to ZER0 for figuring it out. Here's some example code to create an object that works just like jQuery in the console:

var Foo = function() {
  this.splice = Array.prototype.splice;
  Array.prototype.push.apply(this, arguments);

  return this;
}

var f = new Foo();
=> []
console.log(f);
=> []
console.log('test with string concat: ' + f);
=> test with string concat: [object Object]
f instanceof Array
=> false
f instanceof Foo
=> true

Very cool.


回答1:


I believe they have something like that:

// Adding items to an object like an Array:
var myObject = {splice : Array.prototype.splice};

Array.prototype.push.call(myObject, 1, 10, "foo");

// Getting items from an object like an Array:

alert(Array.prototype.slice.call(myObject, 0));

console.log(myObject);

alert(myObject);



回答2:


The console makes it look like an array because it has array-like properties. It has length and n keys using integers.




回答3:


When you call jQuery() you aren't passing any arguments to the function so it is returning an empty object. WHen you pass a selector as argument it creates an object of the elements that match the selector




回答4:


It returns an empty array, because it did nothing - array of elements affected.

Proper way to inspect would be

console.log(jQuery);

if you would do

console.log(jQuery('div'));

you will see that it returns array of elements.




回答5:


I think what you're trying to see are your object's properties. If that's the case, you're inadvertently converting the object into a string when you append it to another string. Use the , operator instead of + to show the object properties instead of the "stringified" version of the object:

console.log('test with string concat: ', j);


来源:https://stackoverflow.com/questions/9657612/how-does-a-jquery-instance-appear-as-an-array-when-called-in-console-log

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!