window.setInterval メソッドのタイムアウト時に既存のオブジェクトでメソッドを実行することは可能ですか。いくつかのグローバル変数を持ち、setInterval でこのグローバル変数のメソッドを呼び出すことで同じことをエミュレートできますが、メソッドを直接使用してこれが可能かどうかを知りたかったのです。
よろしく、 ケシャブ
window.setInterval メソッドのタイムアウト時に既存のオブジェクトでメソッドを実行することは可能ですか。いくつかのグローバル変数を持ち、setInterval でこのグローバル変数のメソッドを呼び出すことで同じことをエミュレートできますが、メソッドを直接使用してこれが可能かどうかを知りたかったのです。
よろしく、 ケシャブ
はい、できます。既存のオブジェクトが「バインド」された新しい関数を作成するには、ヘルパー関数が必要です。
var someRandomObject = {
someMethod: function() {
// ... whatever
},
// ...
};
// this is a "toy" version of "bind"
function bind(object, method) {
return function() {
method.call(object);
};
}
var interval = setInterval(bind(someRandomObject, someRandomObject.someMethod), 1000);
これで、インターバル タイマーがメソッド ("someMethod") を呼び出すと、"this" ポインターがオブジェクトを参照します。
そのバージョンの「バインド」は簡略化されています。Prototype、Functional、jQuery などのライブラリは、通常、より堅牢なバージョンを提供します。さらに、「バインド」機能はいつか Javascript のネイティブ部分になる予定です — 一部のブラウザーでは既に実装されています。