Skip to content

Commit 0d47ca6

Browse files
authored
Merge pull request #292 from cortizg/es.javascript.info.1-08-03-np
Native prototypes
2 parents 1787914 + 57e4f42 commit 0d47ca6

File tree

2 files changed

+5
-28
lines changed

2 files changed

+5
-28
lines changed

1-js/08-prototypes/03-native-prototypes/2-defer-to-prototype-extended/solution.md

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ Function.prototype.defer = function(ms) {
88
}
99
};
1010

11-
// revisalo
11+
// revísalo
1212
function f(a, b) {
1313
alert( a + b );
1414
}
1515

16-
f.defer(1000)(1, 2); // muestra 3 despues de 1 seg
16+
f.defer(1000)(1, 2); // muestra 3 después de 1 seg
1717
```
1818

1919
Tenga en cuenta: utilizamos `this` en `f.apply` para que nuestro decorado funcione para los métodos de objetos.
@@ -39,27 +39,3 @@ user.sayHi = user.sayHi.defer(1000);
3939

4040
user.sayHi();
4141
```
42-
43-
Please note: we use `this` in `f.apply` to make our decoration work for object methods.
44-
45-
So if the wrapper function is called as an object method, then `this` is passed to the original method `f`.
46-
47-
```js run
48-
Function.prototype.defer = function(ms) {
49-
let f = this;
50-
return function(...args) {
51-
setTimeout(() => f.apply(this, args), ms);
52-
}
53-
};
54-
55-
let user = {
56-
name: "John",
57-
sayHi() {
58-
alert(this.name);
59-
}
60-
}
61-
62-
user.sayHi = user.sayHi.defer(1000);
63-
64-
user.sayHi();
65-
```

1-js/08-prototypes/03-native-prototypes/article.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ let obj = {};
1313
alert( obj ); // "[object Object]" ?
1414
```
1515

16-
¿Dónde está el código que genera la cadena `"[objeto Objeto]"`? Ese es un método integrado `toString`, pero ¿dónde está? ¡El `obj` está vacío!
16+
¿Dónde está el código que genera la cadena `"[objetc Objetc]"`? Ese es un método integrado `toString`, pero ¿dónde está? ¡El `obj` está vacío!
1717

1818
...Pero la notación corta `obj = {}` es la misma que `obj = new Object()`, donde `Object` es una función de constructor de objeto integrado, con su propio `prototype` que hace referencia a un objeto enorme con `toString` y otros métodos
1919

@@ -145,7 +145,7 @@ if (!String.prototype.repeat) { // si no hay tal método
145145

146146
// en realidad, el código debería ser un poco más complejo que eso
147147
// (el algoritmo completo está en la especificación)
148-
// pero incluso un polirelleno imperfecto a menudo se considera lo suficientemente bueno
148+
// pero incluso un polyfill (polirelleno) imperfecto a menudo se considera lo suficientemente bueno
149149
return new Array(n + 1).join(this);
150150
};
151151
}
@@ -179,6 +179,7 @@ obj.join = Array.prototype.join;
179179

180180
alert( obj.join(',') ); // Hola,mundo!
181181
```
182+
182183
Funciona porque el algoritmo interno del método integrado `join` solo se preocupa por los índices correctos y la propiedad `length`. No comprueba si el objeto es realmente un arreglo. Muchos métodos integrados son así.
183184

184185
Otra posibilidad es heredar estableciendo `obj.__proto__` en `Array.prototype`, de modo que todos los métodos `Array` estén disponibles automáticamente en `obj`.

0 commit comments

Comments
 (0)