2013年5月26日日曜日

【Javascript】setTimeoutやsetIntervalでthisの値がwindowになってしまう時

Javascriptの仕様でsetTimeoutやsetIntervalで何らかのオブジェクトのメソッドを渡したときに、そのオブジェクト内で使用されているthisの値がwindowになってしまう。

これはだいたいの場合プログラマが意図した動作とはならない。
メソッドを所有しているオブジェクトをthisとしたいはずだ。

その解決として、ECMAScript5はFunction.prototype.bind関数を提供している。


//プロパティnameをコンソールに表示するメソッドを所有しているオブジェクトを作成
var object1 = {
  name: 'hoge',
  method1: function(){
    console.log(this.name);
  }
}

//これではthisがwindowになってしまう
setTimeout(object1.method1,1000);

//bind関数を使用することでthisの値を明示的に指定することができる
setTimeout(object1.method1.bind(object1),1000);

0 件のコメント:

コメントを投稿