我是JS的新手,我理解函数是声明“class like”结构的方法。 我试图做这样的事情:Javascript OOP:绑定方法到事件处理程序
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
可能会有问题,但为什么将它分配给变量会改变它呢? - 我做错了吗?有没有更好的方式以更优雅的方式实现这样的事情?
'this'取决于**你如何调用一个函数。在你的情况下,'this'是DOM元素。 – elclanrs
好的,但为什么当我将它分配给一个变量它改变了它的值? – leo
因为它失去了它的特殊含义,并且简单地存储了这个任务在分配时的情况。 –