Tengo un objeto con un método que me gustaría pasar a una función como una devolución de llamada. Sin embargo, dentro de la devolución de llamada, this
ya no hace referencia a mi objeto. Por qué no?objeto en función de miembro de devolución de llamada
Estoy familiarizado con el uso de una variable para evitar el problema cuando se pasa una función literal:
var obj = {
a: function() {
var me = this;
console.log(this);
setTimeout(function() {
console.log(this); // Not obj
console.log(me); // This works!
}, 100);
}
};
¿Cómo se puede arreglar lo que en este caso?
var obj = {
b: function() {
setTimeout(this.callback, 100);
},
callback: function() {
console.log(this); // =(
}
};
nota que Function.prototype.bind es parte de ECMAScript5, no funcionará en IE6/7/8 y Firefox 3.6 (y menos relevante, ya que de auto -actualizaciones, cromos más antiguos como <6) – gonchuki
. Es más fácil de entender "esto" cuando se piensa en variables/propiedades como punteros a funciones en lugar de ser funciones en sí mismas. 'obj.callback' es solo un puntero a una función que no tiene idea de quién lo señala y de hecho puede tener cualquier cantidad de punteros a la misma. Así que debido a esto, 'this' para la función solo se puede resolver durante el tiempo de llamada y tiene algunas reglas simples para ello. Así que recuerde siempre que se resuelva durante la llamada-tiempo y la vida será más fácil :) Gracias – Esailija
@Esailija –