You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/04-object-methods/article.md
+26-26Lines changed: 26 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ let user = {
11
11
12
12
I tak jak w rzeczywistości, użytkownik może *działać*: wybrać coś z koszyka, zalogować się, wylogować itd.
13
13
14
-
Czynności JavaScript'cie są funkcjami we właściwościach obiektu.
14
+
Czynności w JavaScript'cie są funkcjami we właściwościach obiektu.
15
15
16
16
## Przykłady metod
17
17
@@ -34,13 +34,13 @@ user.sayHi(); // Cześć!
34
34
35
35
Właśnie stworzyliśmy funkcję za pomocą Wyrażenia Funkcji i przypisaliśmy ją do właściwości `user.sayHi` obiektu.
36
36
37
-
Następnie ją wywołaliśmy. Nasz użytkownik potrafi teraz mówić!
37
+
Następnie ją wywołaliśmy i nasz użytkownik potrafi teraz mówić!
38
38
39
39
Funkcję, która jest właściwością obiektu nazywamy *metodą*.
40
40
41
41
Także mamy tutaj metodę `sayHi` obiektu `user`.
42
42
43
-
Oczywiście moglibyśmy również posłużyć się wcześniej zadeklarowaną funkcją jako metodą:
43
+
Oczywiście, moglibyśmy również posłużyć się zadeklarowaną wcześniej funkcją jako metodą:
44
44
45
45
```js run
46
46
let user = {
@@ -61,17 +61,17 @@ user.sayHi(); // Cześć!
61
61
```
62
62
63
63
```smart header="Object-oriented programming"
64
-
Kiedy piszemy kod wykorzystujący obiekty do reprezentowania różnych podmiotów, nazywamy to [programowaniem obiektowym](https://pl.wikipedia.org/wiki/Programowanie_obiektowe), w skrócie:
64
+
Kiedy piszemy kod wykorzystujący obiekty do reprezentowania różnych istnień, nazywamy to [programowaniem obiektowym](https://pl.wikipedia.org/wiki/Programowanie_obiektowe), w skrócie:
65
65
"OOP".
66
66
67
-
OOP to bardzo rozległy i interesujący temat. Jak wybrać właściwe podmioty? Jak stworzyć zależności między nimi? Jest to cała architektura i istnieje wiele świetnych książek traktujących ten temat, jak np. "Wzorce projektowe. Elementy oprogramowania" autorstwa E.Gamma, R.Helm, R.Johnson, J.Vissides, lub "Object-Oriented Analysis and Design with Applications" G.Booch, i wiele innych
67
+
OOP to bardzo rozległy i interesujący temat. Jak wybrać właściwe podmioty? Jak stworzyć zależności między nimi? Jest to cała architektura i istnieje wiele świetnych książek traktujących ten temat, jak np. "Wzorce projektowe. Elementy oprogramowania" autorstwa E.Gamma, R.Helm, R.Johnson, J.Vissides, lub "Object-Oriented Analysis and Design with Applications" G.Booch, i wiele innych.
68
68
```
69
-
### Skrót dla metod
69
+
### Skrót składniowy dla metod
70
70
71
71
Istnieje skrócona składnia dla metod w literałach obiektowych:
72
72
73
73
```js
74
-
//te obiekty działają tak samo
74
+
//poniższe obiekty działają tak samo
75
75
76
76
user = {
77
77
sayHi:function() {
@@ -89,9 +89,9 @@ user = {
89
89
};
90
90
```
91
91
92
-
Tak jak wyżej, możemy pominąć `"function"` i po prostu użyć `sayHi()`.
92
+
Jak widzimy, możemy pominąć `"function"` i po prostu użyć `sayHi()`.
93
93
94
-
Szczerze mowiąc, oba zapisy nie są całkowicie identyczne. Istnieją subtelne różnice między nimi, związane z dziedziczeniem (ten temat poruszymy później), ale na tem moment nie ma to znaczenia. W prawie każdym przypadku lepiej użyć skróconej wersji.
94
+
Prawde mowiąc, oba zapisy nie są całkowicie identyczne. Istnieją subtelne różnice między nimi, związane z dziedziczeniem (ten temat poruszymy później), ale na tem moment nie ma to znaczenia. W prawie każdym przypadku lepiej użyć krótszej składni.
95
95
96
96
## "this" w metodach
97
97
@@ -122,9 +122,9 @@ let user = {
122
122
user.sayHi(); // John
123
123
```
124
124
125
-
Podczas wykonania`user.sayHi()`, wartością `this` będzie `user`.
125
+
Podczas wywołania`user.sayHi()`, wartością `this` będzie `user`.
126
126
127
-
Możliwe jest również uzyskanie dostępu do obiektu bez używania `this`, przez odwołąnie się do niego przez zmienną z zewnątrz:
127
+
Możliwe jest również uzyskanie dostępu do obiektu bez używania `this`, przez odwołanie się do niego za pomocą zmiennej z zewnątrz:
128
128
129
129
```js run
130
130
let user = {
@@ -168,7 +168,7 @@ Jeśli użylibyśmy `this.name` zamiast `user.name` wewnątrz `alert`, wtedy kod
168
168
169
169
## "this" nie jest powiązane
170
170
171
-
W JavaScript słowo kluczowe `this` zachowuje się inaczej niż w innych językach programowania. Może być użyte w każdej funkcji.
171
+
W JavaScript słowo kluczowe `this` zachowuje się inaczej niż w innych językach programowania. Może ono być użyte w każdej funkcji.
172
172
173
173
Zapis taki jak w poniższym przykładzie nie powoduje błędu:
174
174
@@ -220,9 +220,9 @@ sayHi(); // undefined
220
220
221
221
W tym przypadku `this` jest `undefined` w trybie ścisłym. Jeśli spróbujemy uzyskać dostęp do `this.name` pojawi się błąd.
222
222
223
-
Poza trybem ścisłym, w tym przypadku, wartością `this` będzie *obiekt globalny* (`window` w przeglądarce, dojdziemy do tego w późniejszym rozdziale [](info:global-object)). Jest to zamierzchłe zachowanie, które tryb `"use strict"` naprawia.
223
+
Poza trybem ścisłym, w tym przypadku, wartością `this` będzie *obiekt globalny* (`window` w przeglądarce, dojdziemy do tego w późniejszym rozdziale [](info:global-object)). Jest to zamierzchłe zachowanie języka, które tryb `"use strict"` naprawia.
224
224
225
-
Zazwyczaj takie wywołanie jest błędem w kodzie. Jeśli w funkcji istnieje `this`, to powinna zostać wywołana jako metoda obiektu.
225
+
Zazwyczaj takie wywołanie jest błędem w kodzie. Jeśli w funkcji istnieje `this`, to powinna ona zostać wywołana jako metoda obiektu.
226
226
````
227
227
228
228
@@ -231,9 +231,9 @@ Jeśli programujesz w innym języku, zapewne przywykłeś do "powiązanego this"
231
231
232
232
W JavaScript `this` jest "wolne", jego wartość jest określana podczas wykonywania kodu i nie zależy od tego gdzie została zadeklarowana metoda, tylko jaki obiekt znajduje się "przed kropką".
233
233
234
-
Koncepcja określania `this` podczas wykonywania kodu ma wady i zalety. Z jednej strony, funkcja może być wykorzystywana przez różne obiekty. Z drugiej - im większa swoboda, tym większa podatność na pomyłki.
234
+
Koncepcja ewaluacji `this` podczas wykonywania kodu ma wady i zalety. Z jednej strony, funkcja może być wykorzystywana przez różne obiekty. Z drugiej - im większa swoboda, tym większe ryzyko pomyłki.
235
235
236
-
Naszym zadaniem nie jest ocena czy taki wybór przy tworzeniu języka był dobry czy zły. Zastanawiamy się raczej jak z tym pracować, jak zyskać dzięki temu korzyści i jak uniknąć problemów.
236
+
Naszym zadaniem nie jest ocena czy taki wybór przy tworzeniu języka był dobry czy zły. Zastanawiamy się raczej jak z takim mechanizmem pracować, jakie zyskać dzięki temu korzyści i jak uniknąć problemów.
237
237
```
238
238
239
239
## Internals: Referencje
@@ -250,7 +250,7 @@ Zawiła metoda może doprowadzić do zgubienia `this`, na przykład:
250
250
let user = {
251
251
name: "John",
252
252
hi() { alert(this.name); },
253
-
bye() { alert("Bye"); }
253
+
bye() { alert("Pa!"); }
254
254
};
255
255
256
256
user.hi(); // John (zwykłe wywołanie działa bez problemu)
@@ -261,7 +261,7 @@ user.hi(); // John (zwykłe wywołanie działa bez problemu)
261
261
*/!*
262
262
```
263
263
264
-
W ostatniej linijce operator warunkowy wybiera pomiędzy `user.hi` i `user.bye`. W powyższym przykładzie wynikiem jest `ures.hi`.
264
+
W ostatniej linijce operator warunkowy wybiera pomiędzy `user.hi` i `user.bye`. W powyższym przykładzie wynikiem jest `user.hi`.
265
265
266
266
Następnie metoda jest natychmiast wywoływana z nawiasami `()`. Ale nie działa prawidłowo!
267
267
@@ -272,17 +272,17 @@ Ten kod działa (obiekt kropka metoda):
Jak więc informacja o `this` migruje z pierwszej części do drugiej?
288
288
@@ -303,7 +303,7 @@ hi(); // Błąd, ponieważ this jest undefined
303
303
304
304
`hi = user.hi` przypisuje metodę do zmiennej, a na samym końcu jest wywoływana jako osobna funkcja, więc `this` nie posiada już tutaj żadnej wartości.
305
305
306
-
**Żeby `user.hi()` działalo, JavaScript używa sztuczki -- kropka `'.'` nie zwraca funkcji, tylko wartość ze specjalną]ym [Typem Referencji](https://tc39.github.io/ecma262/#sec-reference-specification-type).**
306
+
**Żeby `user.hi()` działało prawidłowo, JavaScript używa sztuczki -- kropka `'.'` nie zwraca funkcji, tylko wartość ze specjalnym [Typem Referencji](https://tc39.github.io/ecma262/#sec-reference-specification-type).**
307
307
308
308
Typ Referencji jest "typem specyfikacji". Nie możemy go bezpośrednio uzyć, ale jest on wbudowany i wykorzystywany przez język.
309
309
@@ -320,11 +320,11 @@ Wynikiem dostępu do właściwości `user.hi` nie jest funkcja, tylko wartość
320
320
(user, "hi", true)
321
321
```
322
322
323
-
Jeśli wywołujemy nawiasy `()` na Typ Referencji, otrzymują one całą informację o obiekcie, jego metodzie i mogą ustawić dla this prawidłową wartość (w tym przypadku `=user`).
323
+
Jeśli wywołujemy nawiasy `()` na Typie Referencji, otrzymują one całą informację o obiekcie, jego metodzie i mogą ustawić dla this prawidłową wartość (w tym przypadku `=user`).
324
324
325
325
Typ Referencji jest specjalnym "pośrednim" typem wewnętrznym, którego zadaniem jest przekazywanie informacji z kropki `.` do nawiasów `()`.
326
326
327
-
Każda inna operacja, jak przypisanie `hi = user.hi` odrzuca całkowicie Typ Referencji, bierze wartośc z `user.hi` (funkcji) i przekazuje ją dalej. Zatem każda następna operacja "gubi" `this`.
327
+
Każda inna operacja, jak przypisanie `hi = user.hi` odrzuca całkowicie Typ Referencji, bierze wartość z `user.hi` (funkcji) i przekazuje ją dalej. Zatem każda następna operacja "gubi" `this`.
328
328
329
329
Podsumowując, wartość `this` jest przekazywane we właściwy sposób jeśli funkcja jest wywoływana za pomocą kropki `obj.method()` lub nawiasów kwadratowych `obj[`method`]()` (obie składnie zadziałają tutaj identycznie). W dalszej części kursu, nauczymy się różnych możliwości aby rozwiązać ten problem, takich jak [func.bind()](/bind#solution-2-bind).
330
330
@@ -353,7 +353,7 @@ Jest to specjalna właściwość funkcji strzalkowych, są użyteczne gdy nie ch
353
353
354
354
- Funkcje które są przechowywane w obiekcie nazywamy "metodami".
355
355
- Metody pozwalają obiektom "zachowywać się" w sposób `object.zróbCoś()`
356
-
- Metody mają referencje do swojego obiektu, jest to wartość ich `this`
356
+
- Metody mają referencje do swojego obiektu, jest to ich wartość `this`
357
357
358
358
Wartość `this` jest określana podczas wykonywania kodu.
359
359
- Kiedy funkcja jest deklarowana, może ona użyć `this`, z tym że nie będzie ono miało wartości tak długo aż funkcja zostanie wywyłana.
0 commit comments