Prawdopodobnie oznaczało chwilę po zrobieniu tego, addMethod staje się dostępny dla wszystkich podstawowych
obiektów
typy obiektów jak String, liczba itp To dlatego, że obiekt String jest funkcją (ale obiekty utworzone przez ciąg nie są).
Np podane
var s = '';
Można zrobić
String.addMethod(...);
ale nie
s.addMethod(...);
Krótkie wyjaśnienie systemu typu JavaScript przychodzi tutaj:
JavaScript robi nie mieć normalną koncepcję zajęć. Zamiast tego możesz osiągnąć nieco to samo, zamieniając dowolną funkcję w konstruktor, umieszczając przed wywołaniem nowe słowo kluczowe przed nim.
Np: podany
function MyFunction(x) { this.myX = x; }
jeśli odwołać się go jak
var myObj = new MyFunction(10);
będzie utworzyć obiekt o nazwie myObj. Ten obiekt będzie miał pojedynczą zmienną składową o nazwie myX. Funkcja MyFunction jest uznawana za konstruktora obiektu (i jest przechowywana we właściwości "constructor").
(Pytanie dodatkowe: co się stanie, jeśli wywołasz powyższą funkcję bez nowego słowa kluczowego, np. var x = MyFunction(10)
. Odpowiedź prawdopodobnie zaskoczyć każdą rozsądną osobę.)
Widzieliście już, jak dowolna funkcja może zostać przekształcona w konstruktor, wbudowane obiekty są dokładnie takie same, obiekty łańcuchowe są tworzone przez funkcję String, liczby są tworzone przez funkcję Numer itp.
Tak jak te wbudowane obiekty są tworzone przez funkcje, każda z tych funkcji jest również tworzona przez funkcję "Funkcja" (yikes!).
Teraz do prototypów.
w powyższym przykładzie, jeśli gdzieś napisać
MyFunction.prototype.someNewMethod = function() {}
wszystkie obiekty stworzone przez konstruktora MyFunction/funkcja pojawi się mieć dodatkową funkcję składową o nazwie someNewMethod. Możesz robić wiele innych funky z prototypami, np. Zastępując prototyp lub zastępując prototypowy prototyp, ale nie jestem w tym ekspertem.
Nie, to implementacja dziedziczenia prototypów w języku JavaScript jest niemądra. Jego dziwny styl "funkcja-jak-konstruktor" nie daje żadnej z potencjalnych zalet prototypów, a jednocześnie jest darmowy od klasowego dziedziczenia, które większość programistów rozumie. Miło jest dokładnie zrozumieć, co robią prototypy JavaScript, ale nie oczekuj epifanii, która wyjaśnia, dlaczego ten model ma sens. Ponieważ tak nie jest. – bobince