Skip to content

Commit 6ef07f3

Browse files
authored
Merge pull request #191 from cortizg/es.javascript.info.1-08-01-ph
Prototypal inheritance
2 parents 99fd6ab + d184663 commit 6ef07f3

File tree

9 files changed

+143
-142
lines changed

9 files changed

+143
-142
lines changed
Lines changed: 3 additions & 3 deletions
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`, tomado de `rabbit`.
3+
2. `null`, tomado de `animal`.
4+
3. `undefined`, ya no existe tal propiedad.

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Working with prototype
5+
# Trabajando con prototipo
66

7-
Here's the code that creates a pair of objects, then modifies them.
7+
Aquí está el código que crea un par de objetos, luego los modifica.
88

9-
Which values are shown in the process?
9+
¿Qué valores se muestran en el proceso?
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+
Debería haber 3 respuestas.

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
1. Let's add `__proto__`:
2+
1. Agreguemos `__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. En los motores modernos, en términos de rendimiento, no hay diferencia si tomamos una propiedad de un objeto o su prototipo. Recuerdan dónde se encontró la propiedad y la reutilizan en la siguiente solicitud.
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 ejemplo, para `pockets.glasses` recuerdan dónde encontraron `glasses` (en `head`), y la próxima vez buscarán allí. También son lo suficientemente inteligentes como para actualizar cachés internos si algo cambia, de modo que la optimización sea segura.

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Searching algorithm
5+
# Algoritmo de búsqueda
66

7-
The task has two parts.
7+
La tarea tiene dos partes.
88

9-
Given the following objects:
9+
Dados los siguientes objetos:
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 asignar prototipos de manera que cualquier búsqueda de propiedades siga la ruta: `pockets` -> `bed` -> `table` -> `head`. Por ejemplo, `pockets.pen` debería ser` 3` (que se encuentra en `table`), y `bed.glasses` debería ser `1` (que se encuentra en `head`).
31+
2. Responda la pregunta: ¿es más rápido obtener `glasses` como `pockets.glasses` o `head.glasses`? Referencie si es necesario.
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
**The answer: `rabbit`.**
1+
**La respuesta es: `rabbit`.**
22

3-
That's because `this` is an object before the dot, so `rabbit.eat()` modifies `rabbit`.
3+
Esto se debe a que `this` es un objeto antes del punto, por lo que `rabbit.eat()` modifica `rabbit`.
44

5-
Property lookup and execution are two different things.
65

7-
The method `rabbit.eat` is first found in the prototype, then executed with `this=rabbit`.
6+
La búsqueda y ejecución de propiedades son dos cosas diferentes.
7+
8+
El método `rabbit.eat` se encuentra primero en el prototipo, luego se ejecuta con `this = rabbit`.

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Where does it write?
5+
# ¿Donde escribe?
66

7-
We have `rabbit` inheriting from `animal`.
7+
Tenemos `rabbit` heredando de `animal`.
88

9-
If we call `rabbit.eat()`, which object receives the `full` property: `animal` or `rabbit`?
9+
Si llamamos a `rabbit.eat()`, ¿qué objeto recibe la propiedad `full`: `animal` o `rabbit`?
1010

1111
```js
1212
let animal = {
Lines changed: 22 additions & 23 deletions
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+
Echemos un vistazo a lo que sucede en la llamada `speedy.eat("manzana")`.
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. El método `speedy.eat` se encuentra en el prototipo (`=hamster`), luego se ejecuta con `this=speedy` (el objeto antes del punto).
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. Entonces `this.stomach.push()` necesita encontrar la propiedad `stomach` y llamar a `push` sobre ella. Busca `stomach` en `this` (`=speedy`), pero no se encuentra nada.
66

7-
3. Then it follows the prototype chain and finds `stomach` in `hamster`.
7+
3. Luego sigue la cadena del prototipo y encuentra `stomach` en `hamster`.
88

9-
4. Then it calls `push` on it, adding the food into *the stomach of the prototype*.
9+
4. Luego se llama 'push' en él, agregando la comida en *el stomach del prototipo*.
1010

11-
So all hamsters share a single stomach!
11+
¡Así que todos los hámsters comparten un solo 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+
Tanto para `lazy.stomach.push(...)` como para `speedy.stomach.push ()`, la propiedad `stomach` se encuentra en el prototipo (ya que no está en el objeto mismo), entonces los nuevos datos son empujado hacia dentro.
1414

15-
Please note that such thing doesn't happen in case of a simple assignment `this.stomach=`:
15+
Tenga en cuenta que tal cosa no sucede en caso de una asignación simple `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+
// asigna a this.stomach en lugar de 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+
// Speedy encontró la comida
38+
speedy.eat("manzana");
39+
alert( speedy.stomach ); // manzana
4040

41-
// Lazy one's stomach is empty
42-
alert( lazy.stomach ); // <nothing>
41+
// El estomago de Lazy está vacio
42+
alert( lazy.stomach ); // <nada>
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+
Ahora todo funciona bien, porque `this.stomach =` no realiza una búsqueda de `stomach`. El valor se escribe directamente en el objeto `this`.
4646

47-
Also we can totally avoid the problem by making sure that each hamster has their own stomach:
47+
También podemos evitar totalmente el problema asegurándonos de que cada hámster tenga su propio estómago:
4848

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

72-
// Speedy one found the food
73-
speedy.eat("apple");
74-
alert( speedy.stomach ); // apple
72+
// Speedy encontró la comida
73+
speedy.eat("manzana");
74+
alert( speedy.stomach ); // manzana
7575

76-
// Lazy one's stomach is empty
77-
alert( lazy.stomach ); // <nothing>
76+
// El estómago de Lazy está vacio
77+
alert( lazy.stomach ); // <nada>
7878
```
79-
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.
79+
Como solución común, todas las propiedades que describen el estado de un objeto en particular, como el "stomach" anterior, deben escribirse en ese objeto. Eso evita tales problemas.

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

Lines changed: 8 additions & 8 deletions
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 qué están llenos los dos hámsters?
66

7-
We have two hamsters: `speedy` and `lazy` inheriting from the general `hamster` object.
7+
Tenemos dos hámsters: `speedy` y `lazy` heredando del objeto `hamster` general.
88

9-
When we feed one of them, the other one is also full. Why? How can we fix it?
9+
Cuando alimentamos a uno de ellos, el otro también está lleno. ¿Por qué? ¿Cómo podemos arreglarlo?
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 encontró la comida
29+
speedy.eat("manzana");
30+
alert( speedy.stomach ); // manzana
3131

32-
// This one also has it, why? fix please.
33-
alert( lazy.stomach ); // apple
32+
// Este también lo tiene, ¿por qué? arreglar por favor.
33+
alert( lazy.stomach ); // manzana
3434
```
3535

0 commit comments

Comments
 (0)