Identificador this
Otro concepto comunmente muy incomprendido en JavaScript es el identificador this
. De nuevo, hay un par de capitulos en titulo this & object Prototypes, asi que aqui tan solo vamos a introducir el concepto.
Aunque a menudo pueda parecer que this
esta relacionado a "patrones orientados a objetos" en JS this
tiene un mecanismo diferente.
Si una funcion tiene una referencia a this
dentro de ella, esa referencia de this
por lo general apunta a un objeto. Pero a que objeto
apunta depende de como la funcion a sido llamada.
Es importante aclarar que this
no se refiere a la misma funcion, como erroneamente se cree.
Aqui un rapida ilustracion:
function foo() {
console.log( this.bar );
}
var bar = "global";
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};
// --------
foo(); // "global"
obj1.foo(); // "obj1"
foo.call( obj2 ); // "obj2"
new foo(); // undefined
Hay cuatro reglas de como this
es establecido, y estan representados en las ultimas cuatro lineas del codigo anterior.
foo()
termina definiendothis
a el objeto global en modo non-strict -- en modo estricto,this
seriaundefined
y se obtendria un error al acceder a la propiedadbar
-- asi que"global"
es el valor encontrado porthis.bar
obj1.foo()
definethis
al objetoobj1
foo.call(obj2)
definethis
al objetoobj2
new foo()
definethis
a un nuevo objeto vacio.
Conclusion final: para entender a que esta apuntando this
, tendra que examinar como la funcion en question es llamada, Sera una de las cuatro maneras que acabamos de mostrar, y que luego respondera que es this