私はJSが初めてで、関数が「クラスのような」構造を宣言する方法であることを理解しています。私はこのようなことをしようとしています:
function Game() {
// Class stuff
this.handleClick = function(e) {
alert(e);
}
// Bind event to method previously defined
$('#board').bind('click', function(e) {
this.handleClick(e); // <--- THIS IS THE PROBLEMATIC LINE
});
}
さて、「問題のある行」に私が書いた場合:
handleClick(e)
私は得るUncaught ReferenceError: handleClick is not defined
。
代わりに、私が書くと:
this.handleClick(e);
私は得るUncaught TypeError: Object #<HTMLCanvasElement> has no method 'handleClick'
しかし、もしそうなら:
function Game() {
// Class stuff
this.handleClick = function(e) {
alert(e);
}
var game = this; // <--- I ASSIGN this TO board
// Bind event to method previously defined
$('#board').bind('click', function(e) {
game.handleClick(e); // <--- THIS WORKS!! WHY????
});
}
できます!?!?!
私の質問は次のとおりです。
- どうしてこうなってしまうのでしょうか?問題になる可能性があることはわかって
this
いますが、変数に代入するとそのように変化するのはなぜですか? - 私はこれを間違っていますか?このようなことをよりエレガントな方法で達成するためのより良い方法はありますか?