Мне интересно, как это возможно, что объекты jQuery отображаются в виде массива в журнале консоли инструментов разработчика в Chrome.
например. если я выполню $('<a>')
, то, что я вижу в журнале консоли:
[<a></a>]
Но следующие утверждения являются ложными:
var a = $("<a>");
Array.isArray(a); // false
a instanceof Array; // false
Я попытался изменить jQuery и посмотреть, что произойдет, и одна удивительная вещь состоит в том, что удаление length
из функции jQuery удаляет запись массива:
length: 0, // commenting this line removes array notation
Вместо этого он затем отображается как (стрелка является сплошной для расширения):
> jQuery.jQuery.fn.jQuery.init
Но если я попытаюсь создать свой собственный конструктор, который должен отображаться в записи массива, он не будет работать:
var test = function() { this.length = 0 };
new test();
// Logged (arrow is same one as before):
// > test
Так что мне интересно, что в коде jQuery позволяет инструментам разработчика показывать экземпляры в виде массива. Какое свойство / функция / вещь добавляется в jQuery, что позволяет инструментам разработчика обрабатывать его как массив при отображении экземпляра?