W swoim wymowny JavaScript, Haverbeke twierdzi, że (strona 16).Czy obiekty funkcji lub typy w JavaScript?
„W systemie JavaScript, większość z tych danych jest starannie rozdzielone na rzeczy zwanych wartości Każda wartość ma typ, który określa rodzaj Rola jaką może zagrać Istnieje sześć podstawowych typów wartości: liczby, łańcuchy, wartości logiczne, obiekty, funkcje i niezdefiniowane wartości. "
Ale Crockforda w JavaScript: The Good Parts mówi.
„Proste typy JavaScript są liczby, ciągi znaków, wartości logiczne (prawda i fałsz), null, a niezdefiniowane Wszystkie inne wartości są obiektami Liczby, łańcuchy znaków i booleans są obiektowe w tym sensie, że mają metody, ale są niezmienne. Obiekty w JavaScript to zmienne, zmutowane kolekcje. W JavaScript tablice są obiektami, funkcjami są obiekty, wyrażenia regularne są obiektami, i oczywiście obiekty są obiektami. "
Teraz, przynajmniej pod V8 uzyskać to:
> typeof function(){};
'function'
> typeof {};
'object'
Nie rozumiem, jeśli obiekt jest rodzaj i funkcja jest obiektem lub jeśli funkcja i przedmiot są oba typy. Chyba brakuje mi rozróżnienia między typami pierwotnymi a rodzajami innego typu (typy złożone?).
Wszystko w JS to obiekt. To tak, jakby powiedzieć, że kwadrat to prostokąt, ale prostokąt nie jest kwadratem. –
@Derek: Niezupełnie wszystko. JS ma prymitywy * (bez obiektów) *, a niektóre z nich mają obiekt "opakowania", ale nie wszystkie. –
Najprościej jest po prostu myśleć o funkcji jako szczególnym typie obiektu, podobnie jak tablica jest specjalnym typem obiektu. Mają możliwości obiektu, ale także inne możliwości, które czynią z niego inny typ obiektu. – jfriend00