this apunta al contexto. En los manejadores de eventos, this es el elemento que ha recibido el evento (el botón, el div, el link...). Si llamas a una función como si fuese un método, this es el objeto. Pero que la función sea declarada como un método no asegura que sea llamada como tal.
Por Ejemplo:
Si estás en el contexto global (no estás dentro de ninguna función), this es window
console.log(this===window);
function test() {
console.log(this===window);
if (this!==window) {
console.log(this);
}
}
test();this es window
Pero si esa función es un atributo de un objeto, entonces this pasa a ser ese objeto:
function test() {
console.log('Es window?:' + (this===window));
if (this!==window) {
console.log('Es obj?:' + (this===obj));
}
}
console.log('Modo no estricto');
var obj={
prueba: 'hola'
}
test();
console.log('Como método');
obj.metodo=test;
obj.metodo();