-
Notifications
You must be signed in to change notification settings - Fork 0
/
erroresThis.js
69 lines (53 loc) · 1.95 KB
/
erroresThis.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Errores comunes al utilizar el keyword 'this'
// el objeto windows representa el contexto global de una App en JS
console.log(this);
var a = "una variable";
function quienSoy(){
console.log(this.a);
console.log(this);
}
quienSoy();
function otraFuncion(){
console.log('\nLlamado de otra función');
quienSoy();
}
otraFuncion();
let obj = {
a: "otra variable",
contador: 10,
func: function(){
console.log("Yo soy ", this);
},
// las func de flecha toman como contexto el lugar donde lexicamente han sido definidas
// en este caso la func fue creada dentro del obj por lo tanto la ref a contador y al obj se mantendran
// dentro del setTimeout
func2: function(){
setTimeout(() => {
if(this.contador){
this.contador = 20;
}
console.log(this.contador);
}, 0);
}
};
obj.func();
obj.func2();
/*
El método call llama la función utilizando como contexto de ejecución el objeto que se pasa como parámetro
*/
quienSoy.call(obj);
// si hacemos clic en este botón con el código así como está nos dará undefined el acceso a la prop this.a
// si dejamos solo this, vemos que la func se ejecuta solo dentro del contexto del button y no dentro del contexto global
// donde la variable ha sido creada
/* let btn = document.getElementById("btn")
.addEventListener("click", function(){
console.log(this.a);
}); */
// para arreglar el problema del bloque de código anterior, podemos utilizar la función flecha
// con esto ya no tomará como contexto el boton si no que tomará el contexto global que es donde se está def la func
let btn = document.getElementById("btn")
.addEventListener("click", () => {
console.log(this.a);
});
// una manera de controlar el contexto de ejec de las func es utilizando la función call. Las funciones en JS son objetos
// por lo tanto, estás tambien tienen métodos