Как экземпляр jQuery отображается в виде массива при вызове из console.log? - PullRequest
2 голосов
/ 11 марта 2012

При вводе в консоль JavaScript объект jQuery отображается в виде массива. Однако это все еще экземпляр объекта jQuery.

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

Как можно продублировать это своим собственным объектом?

--------- РЕДАКТИРОВАТЬ ---------

Спасибо ZER0 за выяснение этого. Вот пример кода для создания объекта, который работает так же, как jQuery в консоли:

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

Очень круто.

Ответы [ 5 ]

6 голосов
/ 11 марта 2012

Я считаю, что у них есть что-то подобное:

// 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);
0 голосов
/ 11 марта 2012

Консоль делает его похожим на массив, потому что имеет свойства, подобные массиву.Он имеет длину и n ключей, используя целые числа.

0 голосов
/ 11 марта 2012

Когда вы вызываете jQuery(), вы не передаете функции аргументы, поэтому она возвращает пустой объект.Когда вы передаете селектор в качестве аргумента, он создает объект из элементов, соответствующих селектору

0 голосов
/ 11 марта 2012

Я думаю, что вы пытаетесь увидеть свойства вашего объекта.Если это так, вы непреднамеренно преобразуете объект в строку, когда добавляете его в другую строку.Используйте оператор , вместо + для отображения свойств объекта вместо «строковой» версии объекта:

console.log('test with string concat: ', j);
0 голосов
/ 11 марта 2012

Возвращает пустой массив, потому что ничего не сделал - затронут массив элементов.

Правильный способ проверки будет

console.log(jQuery);

если бы вы сделали

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

вы увидите, что он возвращает массив элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...