_this などの変数を作成して this に割り当てると、現在のバージョンの this への参照ではなく、クロージャーとしてキャプチャされます。なんで?
コード例:
var AnimCore = (function () {
function AnimCore(ctx) {
this.ctx = ctx;
}
AnimCore.prototype.beginAnimation = function () {
this.animLoop();
};
AnimCore.prototype.animLoop = function () {
var _this = this;
this.ctx.drawSomething(); // removed actual drawing code, this is a proxy for it.
window.setTimeout(function () {
_this.animLoop();
}, 1000 / 60);
};
return AnimCore;
})();
この場合、_this は、関数が呼び出されるたびに新しい this ではなく、最初の this にバインドされます。なんで?
[更新]匿名関数でクロージャーが発生していることを理解しました。これが、_thisが常に同じものを参照する理由です。ただし、次の質問は、なぜ this.ctx が毎回機能するのかということです。匿名関数を使用しないと、初めて失敗します。