11## Prototyp
22
3- JavaScript nie posiada klasycznego modelu dziedziczenia, lecz zamiast tego
3+ JavaScript nie posiada klasycznego modelu dziedziczenia. Zamiast tego
44dziedziczenie jest realizowane poprzez * prototypy* .
55
66Choć jest to często uważane za jedną ze słabości języka JavaScript,
77prototypowy model dziedziczenia, jest w rzeczywistości potężniejszy od klasycznego
8- modelu. Na przykład stworzenia klasycznego modelu na podstawie modelu prototypowym
9- jest dość proste, podczas gdy zrobienie odwrotnie to już o wiele trudniejsze zadanie.
8+ modelu. Na przykład stworzenia klasycznego modelu na podstawie modelu prototypowego
9+ jest dość proste, podczas gdy zrobienie odwrotnego przekształcenie to o wiele trudniejsze zadanie.
1010
1111Ze względu na fakt, że w JavaScript jest w zasadzie jedynym powszechnie stosowanym
12- językiem, któy posiada prototypowy model dziedziczenia, to wymaga troche czasu aby
13- dostosować się do różnic pomiędzy tymi dwoma modelami.
12+ językiem, któy posiada prototypowy model dziedziczenia, dostosowanie się do różnic pomiędzy
13+ tymi dwoma modelami wymaga trochę czasu .
1414
1515Pierwszą znaczącą różnicą jest to, że dziedziczenie w JavaScript odbywa się za pomocą
1616tak zwanych * łańcuchów prototypów* .
1717
18- > ** Uwaga:** Używanie po prosstu ` Bar.prototype = Foo.prototype ` spowoduje, że oba obiekty
19- > będą korzystały z ** tego samego** prototypu. W związku z tym zmiany na prototypie jednego
20- > obiektu będą również zmieniały prototyp drugiego obiektu, co jest w wiekszości przypadków
18+ > ** Uwaga:** Używanie po prostu ` Bar.prototype = Foo.prototype ` spowoduje, że oba obiekty
19+ > będą korzystały z ** tego samego** prototypu. W związku z tym zmiany w prototypie jednego
20+ > obiektu będą również zmieniały prototyp drugiego obiektu, co jest , w wiekszości przypadków,
2121> niepożądanym efektem.
2222
2323 function Foo() {
@@ -47,25 +47,25 @@ tak zwanych *łańcuchów prototypów*.
4747 Object.prototype
4848 { toString: ... /* etc. */ }
4949
50- W powyższym przykładzie obiekt ` test ` będzie dziedziczył z obydwu tj.
50+ W powyższym przykładzie obiekt ` test ` będzie dziedziczył z obydwu, tj.
5151` Bar.prototyp ` i ` Foo.prototyp ` , stąd będzie miał dostęp do funkcji ` method ` ,
5252która była zdefiniowana w ` Foo ` . Ponadto obiekt będzie miał dostęp do
5353właściwości ` value ` , która jest jednyną instancją ` Foo ` i stała się jego prototypem.
54- Ważne jest, aby pamiętać ` new Bar ` ** nie** tworzy nowej instancji ` Foo ` ,
55- ale wykorzystuje instancje, którą jest przypisana do własności ` prototype ` .
54+ Należy pamiętać, że ` new Bar ` ** nie** tworzy nowej instancji ` Foo ` ,
55+ tylko wykorzystuje instancję, która jest przypisana do własności ` prototype ` .
5656Zatem Wszystkie instancje ` Bar ` będą dzieliły tą samą własność ` value ` .
5757
5858> ** Uwaga:** ** Nie** należy używać konstrukcji ` Bar.prototype = Foo ` ,
59- > ponieważ nie spowoduje ona przypisania prototypu ` Foo ` a raczej obiektu
59+ > ponieważ nie spowoduje ona przypisania prototypu ` Foo ` tylko obiektu
6060> funckji ` Foo ` . Zatem łańcuch prototypów nie bedzie zawierał ` Foo.prototype ` ,
61- > ale ` Function.prototype ` , więc metoda ` method ` nie będzie w łańcuchu prototypów.
61+ > tylko ` Function.prototype ` , więc metoda ` method ` nie będzie w łańcuchu prototypów.
6262
6363### Wyszukiwanie własności
6464
65- Podczas dostępu do właściwości obiektu, JavaScript przejdzie w górę łańcucha
66- prototypów dopóki nie znajdzie właściwości z żądaną nazwą .
65+ Podczas dostępu do właściwości obiektu JavaScript przejdzie w górę łańcucha
66+ prototypów, dopóki nie znajdzie właściwości bez nazwy .
6767
68- Gdy przeszukiwanie dotrze do końca (szczytu) łańcucha mianowicie ` Object.prototype `
68+ Gdy przeszukiwanie dotrze do końca (szczytu) łańcucha, mianowicie ` Object.prototype `
6969i nadal nie znajdzie określonej właściwości, to zwróci wartość
7070[ undefined] ( #core.undefined ) .
7171
@@ -85,31 +85,31 @@ na dynamiczne tworzenie łańcuchów prototypów.
8585
8686Czas wyszukiwania właściwości, które są na końcu łańcucha prototypów może mieć
8787negatywny wpływ na wydajność krytycznych części kodu. Dodatkowo, próba dostępu
88- do nieistniejącej właściwości powoduje zawsze przeszukanie całego łańcucha prototypów.
88+ do nieistniejącej właściwości zawsze spowoduje przeszukanie całego łańcucha prototypów.
8989
90- Również, podczas [ iteracji] ( #object.forinloop ) po właściwościach obiektu
91- ** każda** właściwość, która znajduje się w łańcuchu prototypów niezależnie
92- na jakim znajduje się poziomie zostanie wyliczona.
90+ Również podczas [ iteracji] ( #object.forinloop ) po właściwościach obiektu
91+ ** każda** właściwość, która znajduje się w łańcuchu prototypów ( niezależnie
92+ na jakim znajduje się poziomie) zostanie wyliczona.
9393
9494### Rozszerzanie natywnych prototypów
9595
9696Rozszerzanie ` Object.prototype ` lub innego prototypu wbudowanych typów jest jednym z
97- najczęściej używanych niedoskonałej częsci języka JavaScript.
97+ najczęściej nadużywanej częsci języka JavaScript.
9898
9999Technika ta nazywana jest [ monkey patching] [ 1 ] i łamie zasady * enkapsulacji* .
100- Jednak jest szeroko rozpowszechniona w frameworkach takich jak [ Prototype] [ 2 ] .
101- Nie ma jednak dobrego powodu, aby zaśmiecać wbudowane typy poprzez dodawanie do nich
102- * niestandardowych * funkcjonalności.
100+ Mimo to jest szeroko rozpowszechniona w frameworkach takich jak [ Prototype] [ 2 ] .
101+ Nie ma jednak dobrego powodu, aby zaśmiecać wbudowane typy poprzez wzbogacanie ich o
102+ * niestandardowe * funkcjonalności.
103103
104104** Jedynym** dobrym powodem do rozszerzania wbudowanych prototypów jest portowanie
105- funkcjonalności znajdujących sie w nowszych silnikach JavaScript np. [ ` Array.forEach ` ] [ 3 ]
105+ funkcjonalności znajdujących sie w nowszych silnikach JavaScript, np. [ ` Array.forEach ` ] [ 3 ]
106106
107107### Wnioski
108108
109- Zanim przystąpi się do pisania skomplikowanego kodu korzystającego z dziedziczanie
110- należy ** całkowicie** rozumieć prototypowy model dziedziczenia. Ponadto należy uważać
111- na długość łańcucha prototypów i w razie potrzeby zmniejszać ilość dziedziczeń
112- aby uniknąć problemów z wydajnością. Natywne prototypy nie powinny ** nigdy** być
109+ Zanim przystąpi się do pisania skomplikowanego kodu korzystającego z dziedziczania,
110+ należy ** całkowicie** zrozumieć prototypowy model dziedziczenia. Ponadto trzeba uważać
111+ na długość łańcucha prototypów i w razie potrzeby zmniejszać ilość dziedziczeń,
112+ aby uniknąć problemów z wydajnością. Natywne prototypy ** nigdy** nie powinny być
113113rozszerzane, chyba że ze względu na wprowadzanie kompatybilności z nowszymi silnikami
114114JavaScript.
115115
0 commit comments