Czytam przez Javascript: The Good Parts i starałem się omijać sekcję dotyczącą prototypów .
Po krótkim wyszukiwaniu doszedłem do wniosku, że ma to dodawać właściwości do obiektów po deklaracji obiektów.
Używając tego skryptu lśniącego od w3schools, zauważyłem, że usunięcie linii dodającej właściwość prototypu nie miało żadnego efektu . Więc o co chodzi?
//Prototyping
function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}
var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null; // <--- try removing this line
fred.salary=20000;
document.write (fred.salary);
javascript
prototyping
technique
Łagodny Fuzz
źródło
źródło
Odpowiedzi:
Nie tak działa prototyp. Prototyp jest wykorzystywany w łańcuchu prototypów.
Ilekroć spróbujesz uzyskać właściwość dla obiektu, sprawdzi on obiekt pod kątem tej nazwy właściwości. Jeśli nie istnieje, zajrzy do prototypu.
Przykład:
Tak więc celem prototypu jest po prostu ponowne użycie kodu i dziedziczenie.
źródło
prototype is undefined
---o.prototype.newProp = "mutts nuts";
o
to obiekt..prototype
Nieruchomość jest wykorzystywana na funkcje, zignoruj go. Po prostu zróbo.newProp = "mutts nuts"
Kiedy to zrobiłeś
fred.salary=20000
, dodałeś atrybut wynagrodzenia tylko do freda. Podczas korzystania z prototypu wszyscy pracownicy, których będziesz odtąd tworzył, będą mieli atrybut wynagrodzenia.Załóżmy, że masz 100 wystąpień pracowników i chcesz dodać do nich atrybut wynagrodzenia. Możesz to zrobić ręcznie, iterować każdego pracownika i dodać go. Lub możesz użyć prototypu i ustawić go dla wszystkich.
Prototyp jest przydatny, gdy chcesz funkcjonalność do czegoś, co już istnieje. Powiedz, że chcesz dodać niestandardową metodę do tablic. Zrobiłbyś coś takiego:
Odtąd wszystkie tablice, które utworzysz, będą miały tę metodę dostępną.
źródło
Możesz rzucić okiem na ten artykuł .
Jeśli dodasz właściwość do obiektu, który jest używany jako prototyp dla zestawu obiektów, obiekty, dla których jest to prototyp, również otrzymają nową właściwość.
To jedna z głównych zalet języka opartego na prototypach w porównaniu do języka opartego na klasach.
W razie potrzeby łatwo jest uzyskać klasyczne dziedzictwo OO w JS, ale często trudno jest uzyskać prototypowy model dla języka, który domyślnie go nie implementuje.
źródło