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
+23-17Lines changed: 23 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@ En JavaScript, los objetos tienen una propiedad oculta especial `[[Prototype]]`
12
12
13
13

14
14
15
-
El prototipo es un poco "mágico". Cuando queremos leer una propiedad de `object`, y falta, JavaScript la toma automáticamente del prototipo. En programación, tal cosa se llama "herencia prototípica". Muchas características geniales del lenguaje y técnicas de programación se basan en él.
15
+
Cuando leemos una propiedad de `object`, y falta, JavaScript la toma automáticamente del prototipo. En programación esto se llama "herencia prototípica". Pronto estudiaremos muchos ejemplos de esta herencia y otras características interesantes del lenguaje que se basan en ella.
16
16
17
17
La propiedad `[[Prototype]]` es interna y está oculta, pero hay muchas formas de configurarla.
```smart header="`__proto__` es un getter/setter histórico para `[[Prototype]]`"
35
-
Tenga en cuenta que `__proto__`*no es lo mismo* que `[[Prototype]] `. Es un getter/setter para este.
36
-
37
-
Existe por razones históricas. En lenguaje moderno, se reemplaza con las funciones `Object.getPrototypeOf/Object.setPrototypeOf` que también obtienen/establecen el prototipo. Estudiaremos las razones de eso y estas funciones más adelante.
38
-
39
-
Según la especificación, `__proto__` solo debe ser compatible con los navegadores, pero de hecho todos los entornos lo admiten, incluido el lado del servidor. Por ahora, como la notación `__proto__` es un poco más intuitiva, la usaremos en los ejemplos.
40
-
```
41
-
42
-
Si buscamos una propiedad en `rabbit`, y falta, JavaScript automáticamente la toma de `animal`.
34
+
Si buscamos una propiedad en `rabbit`, y falta, JavaScript la toma automáticamente de `animal`.
43
35
44
36
Por ejemplo:
45
37
@@ -55,7 +47,7 @@ let rabbit = {
55
47
rabbit.__proto__= animal; // (*)
56
48
*/!*
57
49
58
-
// // podemos encontrar ambas propiedades en conejo ahora:
50
+
//Ahora podemos encontrar ambas propiedades en conejo:
Ahora, si leemos algo de `longEar` y falta, JavaScript lo buscará en `rabbit`, y luego en `animal`.
126
+
133
127
Solo hay dos limitaciones:
134
128
135
-
1.Las referencias no pueden ir en círculos. JavaScript arrojará un error si intentamos asignar `__proto__` en un círculo.
136
-
2. El valor de `__proto__` puede ser un objeto o `nulo`. Otros tipos son ignorados.
129
+
1.No puede haber referencias circulares. JavaScript arrojará un error si intentamos asignar `__proto__` en un círculo.
130
+
2. El valor de `__proto__` puede ser un objeto o `null`. Otros tipos son ignorados.
137
131
138
132
También puede ser obvio, pero aún así: solo puede haber un `[[Prototype]]`. Un objeto no puede heredar desde dos.
139
133
134
+
135
+
```smart header="`__proto__` es un getter/setter histórico para `[[Prototype]]`"
136
+
Es un error común de principiantes no saber la diferencia entre ambos.
137
+
138
+
Tenga en cuenta que `__proto__`*no es lo mismo* que `[[Prototype]]`. `__proto__` es un getter/setter para `[[Prototype]]`. Más adelante veremos situaciones donde esto importa, por ahora solo tengámoslo en cuenta mientras vamos entendiendo el lenguaje JavaScript.
139
+
140
+
La propiedad `__proto__` es algo vetusta. Existe por razones históricas, el JavaScript moderno sugiere el uso de las funciones `Object.getPrototypeOf/Object.setPrototypeOf` en lugar de get/set del prototipo. Estudiaremos estas funciones más adelante.
141
+
142
+
Según la especificación, `__proto__` solo debe ser soportado por los navegadores. Aunque de hecho, todos los entornos incluyendo los del lado del servidor soportan `__proto__`, así que bastante seguro usarlo.
143
+
144
+
Como la notación `__proto__` es más intuitiva, la usaremos en los ejemplos.
145
+
```
146
+
140
147
## La escritura no usa prototipo
141
148
142
149
El prototipo solo se usa para leer propiedades.
@@ -159,11 +166,11 @@ let rabbit = {
159
166
160
167
*!*
161
168
rabbit.walk = function() {
162
-
alert("¡Conejo! Rebota-rebota!");
169
+
alert("¡Conejo! ¡Salta, salta!");
163
170
};
164
171
*/!*
165
172
166
-
rabbit.walk(); // ¡Conejo! Rebota-rebota!
173
+
rabbit.walk(); // ¡Conejo! ¡Salta, salta!
167
174
```
168
175
169
176
De ahora en adelante, la llamada `rabbit.walk()` encuentra el método inmediatamente en el objeto y lo ejecuta, sin usar el prototipo:
@@ -195,7 +202,7 @@ let admin = {
195
202
196
203
alert(admin.fullName); // John Smith (*)
197
204
198
-
//disparadores setter!
205
+
//¡Dispara el setter!
199
206
admin.fullName="Alice Cooper"; // (**)
200
207
201
208
alert(admin.fullName); // Alice Cooper , estado de admin modificado
0 commit comments