Mimo że obiekty jQuery działają jak tablice, są one w rzeczywistości tylko obiektami podobnymi do tablic . Obiektem podobnym do tablicy jest obiekt, który używa kluczy numerycznych i ma właściwość length
- to jest minimum potrzebne do kompatybilności z native array methods.
Ponieważ obiekty jQuery są tylko obiektami tablicowymi i nie są rzeczywistymi obiektami macierzystymi (np. indexOf
lub reverse
), nie można wywoływać bezpośrednio. Możesz jednak użyć Array.prototype
lub rozszerzyć funkcjonalność 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!
Masz rację, zakładając, że Firebug nie zawiera specjalnych obudów do formatowania obiektów jQuery. Szybkie wyszukiwanie ujawnia a relevant post na liście mailingowej Firebug. Zakładając, że informacje są nadal poprawne (post jest od stycznia) Firebug sformatuje obiekt jako tablicę, jeśli ma on skończoną długość skończoną długość i metodę.
JQuery spełnia oba te kryteria, ale their implementation of splice
to nic innego jak bezpośrednia kopia natywnej metody Array
. Jest to nieudokumentowane, co oznacza, że jest albo tylko do użytku wewnętrznego, albo może dodane tylko w celu nakłonienia Firebug do ładnego formatowania obiektów jQuery.
Co sprawia, że uważasz, że to nie tylko obiekty z kluczami numerycznymi? – Marius
Po pierwsze, Firebug wyświetla obiekty jQuery jako tablice, ale nie takie ręcznie tworzone obiekty - i wątpię, czy ma ono specjalną obsługę dla jQuery. – AnC