Как $ ('h1') регистрируется в веб-консоли как массив в jQuery?

Если ты это сделаешьconsole.log($('some selector')) в браузере возвращает то, что выглядит как массив (первая строка):

Но обратите внимание, что это неinstanceof Array, но на самом деле это thejQuery объект.

Когда ты это делаешьconsole.dir($('h1')), это показывает, что это на самом деле объект jQuery.

Вопрос в том, как они выглядят, как массив в веб-консоли? Я заметил в источнике jQueryВо они добавляют ссылку на несколько методов Array и Object, иВо они добавляютtoArray (и ломтик и другие) наjQuery объект. Проверяет ли веб-консоль каким-либо образом эти методы и находит ли она один toArray, indexOf, slice и т. д.), это печатает как массив? Я хотел бы получить это поведение из любого пользовательского объекта, такого какEmber.ArrayProxy. В настоящее время, когда вы входите вEmber.ArrayProxy это показывает> Object или что угодно, но было бы неплохо показать это в виде массива.

Любые идеи

 jimw26 мая 2012 г., 04:09
Это изображение кода?
 pimvdb26 мая 2012 г., 14:40
 Lance Pollard26 мая 2012 г., 04:10
Да, это изображение

Ответы на вопрос(1)

Решение Вопроса

Ты наследуешь свой объект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, и индексирование, которое идет с этим также!

 bfavaretto26 мая 2012 г., 05:10
@ minitech Я не думаю, что jQuery действительно наследуется от прототипа массива, он реализуетlength, splice и, возможно, другие методы.
 Ry-♦26 мая 2012 г., 04:30
@ Дерек: Я только что прочиталReferer заголовок с использованием PHP и взять?add параметр из него, при этом отслеживая сеансы. Не говори никому
 Lance Pollard26 мая 2012 г., 04:13
Ницца! Ну, я просто сделал несколько других тестов, и если вы сделаете это:var x = {length: 0, splice: Array.prototype.splice}, тогдаx будет выглядеть как массив. Странно ... Требуются именно те 2 свойства, на которые он похож.
 Lance Pollard26 мая 2012 г., 04:12
Это работает кросс-браузер?
 Lance Pollard26 мая 2012 г., 04:20
P.S. Тебе 14, хардкор! :) Собираюсь изменить мир.

Ваш ответ на вопрос