コールバックとして関数に渡したいメソッドを持つオブジェクトがあります。しかし、コールバックの内部では、this
はもはや自分のオブジェクトを参照しません。何故なの?メンバー関数コールバックでオブジェクトを取得する
私は、関数リテラルを渡すときに問題を回避するために変数を使用して精通よ:
var obj = {
a: function() {
var me = this;
console.log(this);
setTimeout(function() {
console.log(this); // Not obj
console.log(me); // This works!
}, 100);
}
};
私はこのケースでは、それを解決することができますか?
var obj = {
b: function() {
setTimeout(this.callback, 100);
},
callback: function() {
console.log(this); // =(
}
};
ノートは、それはそれとして自動IE6/7/8、Firefoxの3.6(およびにはあまり関連が動作しません。 -updates、古いChromes <6) – gonchuki
変数/プロパティを関数自体ではなく関数へのポインタと考えるとき、 'this'を理解する方が簡単です。 'obj.callback'は、それを指している人が何も知らない関数へのポインタにすぎず、実際にポインタをいくつでも持つことができます。このため、関数の 'this'は呼び出し時にしか解決できず、いくつかの簡単な規則があります。だからいつもそれはコール時に解決されていると覚えている人生は簡単になります:) – Esailija
ありがとう@エジハイヤ –