Ответ 1
Хотя объекты jQuery действуют как массивы, они фактически являются только подобными массиву объектами. Объект, подобный массиву, является объектом, использующим числовые ключи и обладающим свойством length
- минимальным, необходимым для совместимости с методами родного массива..
Поскольку объекты jQuery являются только массивами, а не фактическими объектами Array
, операциями с собственными массивами (например, indexOf
или reverse
) нельзя вызвать напрямую. Вы можете использовать Array.prototype
хотя или расширить функциональность jQuery.
$('div').reverse(); // TypeError: $("div").reverse is not a function
// we can use Array.prototype though
Array.prototype.reverse.apply($('div'));
// or we can extend jQuery very easily
$.fn.reverse = Array.prototype.reverse;
$('div').reverse(); // now it works!
Вы правы в своем предположении, что Firebug не содержит специальных оболочек для форматирования объектов jQuery. Быстрый поиск показывает соответствующее сообщение в списке рассылки Firebug. Предполагая, что информация по-прежнему правильная (сообщение с января) Firebug будет отформатировать объект как массив, если он имеет конечную длину и splice
метод.. p >
JQuery выполняет оба этих критерия, но их реализация splice
- не что иное, как прямая копия собственного метода Array
, Он недокументирован, что означает его либо только для внутреннего использования, либо, возможно, только для цели использования Firebug в форматировании объектов jQuery.