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/08-prototypes/01-prototype-inheritance/article.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,13 +8,13 @@ Herança Prototipada (*Prototypal inheritance*) é uma funcionalidade da linguag
8
8
9
9
## [[Prototype]]
10
10
11
-
No Javascript, os objetos possuem uma propriedade escondida especial `[[Prototype]]` (como é chamada na especificação), cujo valor é `null` ou é uma referência de outro objeto. Esse objeto é chamado de "protótipo":
11
+
No Javascript, os objetos possuem uma propriedade escondida especial `[[Prototype]]` (como é chamada na especificação), cujo valor é `null` ou referencia outro objeto. Esse objeto é chamado de "protótipo":
12
12
13
13

14
14
15
15
Quando lemos uma propriedade de um `object`, e ela não está presente, o Javascript automaticamente obtém seu valor do protótipo. Na programação, isso é chamado de "herança prototipada". Em breve nós vamos ver vários exemplos dessa herança, bem como funcionalidades legais constrúidas em cima disso.
16
16
17
-
A propriedade `[[Prototype]]` é interna e escondida, mas existem várias formas de setar um valor para ela.
17
+
A propriedade `[[Prototype]]` é interna e escondida, mas existem várias formas de configurar um valor para ela.
18
18
19
19
Uma delas é usar o nome especial `__proto__`, dessa forma:
A linha `(*)` do exemplo seta`animal` como o protótipo de `rabbit`.
57
+
A linha `(*)` do exemplo configura`animal` como o protótipo de `rabbit`.
58
58
59
59
Depois, quando o `alert` tenta ler a propriedade `rabbit.eats`, em `(**)`, ela não está no `rabbit`, então o Javascript segue a referência do `[[Prototype]]` e a encontra no `animal` (olhe de baixo pra cima):
60
60
@@ -71,7 +71,7 @@ let animal = {
71
71
eats:true,
72
72
*!*
73
73
walk() {
74
-
alert("Animal walk");
74
+
alert("Animal caminha");
75
75
}
76
76
*/!*
77
77
};
@@ -83,7 +83,7 @@ let rabbit = {
83
83
84
84
// walk é obtido do protótipo
85
85
*!*
86
-
rabbit.walk(); // Animal walk
86
+
rabbit.walk(); // Animal caminha
87
87
*/!*
88
88
```
89
89
@@ -98,7 +98,7 @@ A cadeia de protótipos pode ser maior:
98
98
let animal = {
99
99
eats:true,
100
100
walk() {
101
-
alert("Animal walk");
101
+
alert("Animal caminha");
102
102
}
103
103
};
104
104
@@ -117,7 +117,7 @@ let longEar = {
117
117
};
118
118
119
119
// walk é obtido da cadeia de protótipos
120
-
longEar.walk(); // Animal walk
120
+
longEar.walk(); // Animal caminha
121
121
alert(longEar.jumps); // true (vindo de rabbit)
122
122
```
123
123
@@ -138,7 +138,7 @@ Além disso, só pode haver um `[[Prototype]]`. Um objeto não pode ser herdeiro
138
138
139
139
Mas note que `__proto__`*não é o mesmo* que a propriedade interna `[[Prototype]]`. Ele é um getter/setter para o `[[Prototype]]`. Mais tarde veremos situações nas quais isso importa, por ora vamos apenar manter isso em mente enquanto contruímos nossa compreensão da linguagem Javascript.
140
140
141
-
A proriedade`__proto__` está um pouco ultrapassada, ela existe por motivos históricos. O Javascript moderno sugere que nós usemos as funções `Object.getPrototypeOf/Object.setPrototypeOf` no lugar, que também fazem get/set do protótipo. Nós também vamos cobrir essas funções mais tarde.
141
+
A propriedade`__proto__` está um pouco ultrapassada, ela existe por motivos históricos. O Javascript moderno sugere que nós usemos as funções `Object.getPrototypeOf/Object.setPrototypeOf` no lugar, que também fazem get/set do protótipo. Nós também vamos cobrir essas funções mais tarde.
142
142
143
143
A especificação diz que o `__proto__` só pode ser suportado por browsers. Mas o fato é que todos os ambientes, incluindo o lado do servidor ("server-side") suportam o `__proto__`, então podemos usá-lo tranquilamente.
144
144
@@ -150,7 +150,7 @@ Como a notação `__proto__` é um pouco mais intuitiva, vamos usá-la nos exemp
150
150
151
151
O protótipo é usado apenas para leitura de propriedades.
152
152
153
-
As operações de escrita/deleção funcionam diretamente com o objeto.
153
+
As operações de escrita/deleção trabalham diretamente com o objeto.
154
154
155
155
No exemplo abaixo, nós criamos um método `walk` próprio para o `rabbit`:
156
156
@@ -168,18 +168,18 @@ let rabbit = {
168
168
169
169
*!*
170
170
rabbit.walk = function() {
171
-
alert("Rabbit! Bounce-bounce!");
171
+
alert("Coelho! Pula-pula!");
172
172
};
173
173
*/!*
174
174
175
-
rabbit.walk(); // Rabbit! Bounce-bounce!
175
+
rabbit.walk(); // Coelho! Pula-pula!
176
176
```
177
177
178
178
De agora em diante, chamar `rabbit.walk()` encontra o método imediatamente no objeto e o executa, sem usar o protótipo:
179
179
180
180

181
181
182
-
Isso vale apenas para propriedades com dados, não para métodos de acesso (getter/setter). Se uma propriedade é um getter/setter, então ela irá se comportar como uma função: getters/setters são procurados no protótipo.
182
+
Isso vale apenas para propriedades que são dados, não para métodos de acesso (getter/setter). Se uma propriedade é um getter/setter, então ela irá se comportar como uma função: getters/setters são procurados no protótipo.
183
183
184
184
Por essa razão, `admin.fullName` funciona corretamente no código abaixo:
185
185
@@ -227,14 +227,14 @@ Na verdade isso é super importante, porque pode ser que a gente tenha um objeto
227
227
228
228
Por exemplo, aqui `animal` representa um "armazenador de métodos", e `rabbit` faz uso deles.
229
229
230
-
A chamada de `rabbit.sleep()`seta`this.isSleeping` no objeto `rabbit`:
230
+
A chamada de `rabbit.sleep()`configura`this.isSleeping` no objeto `rabbit`:
0 commit comments