¿Dónde está mi 'esto'? Usando el método de los objetos como una función de devolución de llamada
Tengo una pregunta genérica sobre la especificación de javascript o la implementación del puntero de funciones (¿delegados?) Que son puntos a métodos de objetos.
Por favor, lea el siguiente fragmento de código. Aquí tenemos un objeto con un método que usa 'esto' para acceder a un campo de objeto. Cuando llamamos a este método como de costumbre (o.method();
), devuelve el valor del campo especificado del objeto. Pero cuando creamos un puntero a este método (devolución de llamada) y lo invocamos, devuelve un valor indefinido, porque 'este' dentro del alcance del método ahora es un objeto global.
var o = {
field : 'value',
method : function() {
return this.field;
}
};
o.method(); // returns 'value'
var callback = o.method;
callback(); // returns 'undefined' cause 'this' is global object
Entonces, ¿dónde está mi 'esto'?