Skip to content

Commit 218098a

Browse files
chore: translate prototype inheritance article
Prototypal inheritance
2 parents da79189 + 19f7f94 commit 218098a

File tree

10 files changed

+144
-144
lines changed

10 files changed

+144
-144
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

2-
1. `true`, taken from `rabbit`.
3-
2. `null`, taken from `animal`.
4-
3. `undefined`, there's no such property any more.
2+
1. `true`, obtido de `rabbit`.
3+
2. `null`, obtido de `animal`.
4+
3. `undefined`, essa propriedade não existe mais.

Diff for: 1-js/08-prototypes/01-prototype-inheritance/1-property-after-delete/task.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Working with prototype
5+
# Trabalhando com protótipos
66

7-
Here's the code that creates a pair of objects, then modifies them.
7+
Aqui está o código que cria um par de objetos, e depois os modifica.
88

9-
Which values are shown in the process?
9+
Que valores são mostrados no processo?
1010

1111
```js
1212
let animal = {
@@ -28,4 +28,4 @@ delete animal.jumps;
2828
alert( rabbit.jumps ); // ? (3)
2929
```
3030

31-
There should be 3 answers.
31+
Deve haver 3 respostas.

Diff for: 1-js/08-prototypes/01-prototype-inheritance/2-search-algorithm/solution.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
1. Let's add `__proto__`:
2+
1. Vamos adicionar `__proto__`:
33

44
```js run
55
let head = {
@@ -27,6 +27,6 @@
2727
alert( table.money ); // undefined
2828
```
2929

30-
2. In modern engines, performance-wise, there's no difference whether we take a property from an object or its prototype. They remember where the property was found and reuse it in the next request.
30+
2. Em interpretadores de JavaScript modernos, em termos de performance (*performance-wise*), não há diferença entre obtermos uma propriedade de um objeto ou do seu protótipo. Eles se lembram onde a propriedade foi encontrada e reutilizam isso na próxima requisição.
3131

32-
For instance, for `pockets.glasses` they remember where they found `glasses` (in `head`), and next time will search right there. They are also smart enough to update internal caches if something changes, so that optimization is safe.
32+
Por exemplo, para `pockets.glasses` eles se lembram onde encontraram `glasses` (em `head`), e na próxima vez vão procurar lá. Eles também são inteligentes o suficiente para atualizar caches internos se algo mudar, então essa otimização é segura.

Diff for: 1-js/08-prototypes/01-prototype-inheritance/2-search-algorithm/task.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Searching algorithm
5+
# Algoritmo de busca
66

7-
The task has two parts.
7+
A tarefa tem duas partes.
88

9-
Given the following objects:
9+
Dados os objetos a seguir:
1010

1111
```js
1212
let head = {
@@ -27,5 +27,5 @@ let pockets = {
2727
};
2828
```
2929

30-
1. Use `__proto__` to assign prototypes in a way that any property lookup will follow the path: `pockets` -> `bed` -> `table` -> `head`. For instance, `pockets.pen` should be `3` (found in `table`), and `bed.glasses` should be `1` (found in `head`).
31-
2. Answer the question: is it faster to get `glasses` as `pockets.glasses` or `head.glasses`? Benchmark if needed.
30+
1. Use `__proto__` para atribuir propriedades de forma que qualquer busca de propriedades siga o caminho: `pockets` -> `bed` -> `table` -> `head`. Por exemplo, `pockets.pen` deve ter o valor `3` (encontrado em `table`), e `bed.glasses` deve ter o valor `1` (encontrado em `head`).
31+
2. Responda à seguinte questão: é mais rápido obter `glasses` como `pockets.glasses` ou como `head.glasses`? Compare (*benchmark*), se necessário.
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
**The answer: `rabbit`.**
1+
**A resposta: `rabbit`.**
22

3-
That's because `this` is an object before the dot, so `rabbit.eat()` modifies `rabbit`.
3+
Isso porque `this` é o objeto antes do ponto, então `rabbit.eat()` modifica `rabbit`.
44

5-
Property lookup and execution are two different things.
5+
Procurar e executar propriedades são duas coisas diferentes.
66

7-
The method `rabbit.eat` is first found in the prototype, then executed with `this=rabbit`.
7+
O método `rabbit.eat` primeiro é encontrado no protótipo, depois é exectado com `this=rabbit`.

Diff for: 1-js/08-prototypes/01-prototype-inheritance/3-proto-and-this/task.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Where does it write?
5+
# Onde vai escrever?
66

7-
We have `rabbit` inheriting from `animal`.
7+
Nós temos `rabbit` herdando de `animal`.
88

9-
If we call `rabbit.eat()`, which object receives the `full` property: `animal` or `rabbit`?
9+
Se nós chamarmos `rabbit.eat()`, que objeto recebe a propriedade `full`: `animal` ou `rabbit`?
1010

1111
```js
1212
let animal = {

Diff for: 1-js/08-prototypes/01-prototype-inheritance/4-hamster-proto/solution.md

+22-22
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
Let's look carefully at what's going on in the call `speedy.eat("apple")`.
1+
Vamos ver cuidadosamente o que está acontecendo na chamada `speedy.eat("apple")`.
22

3-
1. The method `speedy.eat` is found in the prototype (`=hamster`), then executed with `this=speedy` (the object before the dot).
3+
1. O método `speedy.eat` é encontrado no protótipo (`=hamster`), e executado usando `this=speedy` (o objeto antes do ponto).
44

5-
2. Then `this.stomach.push()` needs to find `stomach` property and call `push` on it. It looks for `stomach` in `this` (`=speedy`), but nothing found.
5+
2. Então o método `this.stomach.push()` precisa de encontrar uma propriedade `stomach` e chamar o `push` nela. Ele procura por um `stomach` no `this` (`=speedy`), mas não encontra.
66

7-
3. Then it follows the prototype chain and finds `stomach` in `hamster`.
7+
3. Aí ele segue a cadeia de protótipos e encontra `stomach` no `hamster`.
88

9-
4. Then it calls `push` on it, adding the food into *the stomach of the prototype*.
9+
4. Por fim, ele chama o `push`, adicionando a comida (*food*) dentro do *`stomach` do protótipo*.
1010

11-
So all hamsters share a single stomach!
11+
Então, todos os hamsters compartilham o mesmo estômago!
1212

13-
Both for `lazy.stomach.push(...)` and `speedy.stomach.push()`, the property `stomach` is found in the prototype (as it's not in the object itself), then the new data is pushed into it.
13+
Para ambos `lazy.stomach.push(...)` e `speedy.stomach.push()`, a propriedade `stomach` é encontrada no protótipo (porque não está no próprio objeto), e assim os novos dados são colocados nela.
1414

15-
Please note that such thing doesn't happen in case of a simple assignment `this.stomach=`:
15+
Note que isso não acontece no caso de uma simples atribuição `this.stomach=`:
1616

1717
```js run
1818
let hamster = {
1919
stomach: [],
2020

2121
eat(food) {
2222
*!*
23-
// assign to this.stomach instead of this.stomach.push
23+
// atribui o valor para this.stomach ao invés de usar this.stomach.push
2424
this.stomach = [food];
2525
*/!*
2626
}
@@ -34,17 +34,17 @@ let lazy = {
3434
__proto__: hamster
3535
};
3636

37-
// Speedy one found the food
38-
speedy.eat("apple");
39-
alert( speedy.stomach ); // apple
37+
// O Speedy acha a comida
38+
speedy.eat("maçã");
39+
alert( speedy.stomach ); // maçã
4040

41-
// Lazy one's stomach is empty
42-
alert( lazy.stomach ); // <nothing>
41+
// O estômago do Lazy continua vazio
42+
alert( lazy.stomach ); // <vazio>
4343
```
4444

45-
Now all works fine, because `this.stomach=` does not perform a lookup of `stomach`. The value is written directly into `this` object.
45+
Agora tudo funciona bem, porque `this.stomach=` não procura por um `stomach`. O valor é escrito diretamente no `this` do objeto.
4646

47-
Also we can totally avoid the problem by making sure that each hamster has their own stomach:
47+
Além disso, nós podemos evitar completamente o problema fazendo com que cada hamster tenha seu próprio estômago:
4848

4949
```js run
5050
let hamster = {
@@ -69,12 +69,12 @@ let lazy = {
6969
*/!*
7070
};
7171

72-
// Speedy one found the food
73-
speedy.eat("apple");
74-
alert( speedy.stomach ); // apple
72+
// O Speedy acha a comida
73+
speedy.eat("maçã");
74+
alert( speedy.stomach ); // maçã
7575

76-
// Lazy one's stomach is empty
77-
alert( lazy.stomach ); // <nothing>
76+
// O estômago do Lazy continua vazio
77+
alert( lazy.stomach ); // <vazio>
7878
```
7979

80-
As a common solution, all properties that describe the state of a particular object, like `stomach` above, should be written into that object. That prevents such problems.
80+
É uma solução comum, fazer com que todas as propriedades que descrevem um estado particular do objeto, como o `stomach` acima, sejam escritas dentro do próprio objeto. Isso previne esses problemas.

Diff for: 1-js/08-prototypes/01-prototype-inheritance/4-hamster-proto/task.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Why are both hamsters full?
5+
# Por que os dois hamsters estão cheios?
66

7-
We have two hamsters: `speedy` and `lazy` inheriting from the general `hamster` object.
7+
Nós temos dois hamsters: `speedy` e `lazy`, que herdam do objeto genérico `hamster`.
88

9-
When we feed one of them, the other one is also full. Why? How can we fix it?
9+
Quando nós alimentamos um deles, o outro também fica cheio. Por quê? Como podemos corrigir isso?
1010

1111
```js run
1212
let hamster = {
@@ -25,11 +25,11 @@ let lazy = {
2525
__proto__: hamster
2626
};
2727

28-
// This one found the food
29-
speedy.eat("apple");
30-
alert( speedy.stomach ); // apple
28+
// Este aqui encontrou a comida
29+
speedy.eat("maçã");
30+
alert( speedy.stomach ); // maçã
3131

32-
// This one also has it, why? fix please.
33-
alert( lazy.stomach ); // apple
32+
// Esse aqui também comeu, por quê? Corrija, por favor.
33+
alert( lazy.stomach ); // maçã
3434
```
3535

0 commit comments

Comments
 (0)