2

这里的第一个问题。

我正在尝试 Javascript 对象。这是我的代码:

function main(){
    document.onkeydown = hero.keyListener;
    hero.move();
    hero.counter(); 
}
var hero = {
    dx: undefined,
    dy: undefined,
    keyListener: function (e) {
        this.dy = 100;
    },  
    move: function () {
        this.dx = 80;
    },
    counter: function() {
        document.getElementById("dxcounter").innerHTML = "Dx: "+ this.dx + " Dy: "+ this.dy;
    }   
};

move 方法会更新,但 keyListener在按下键时this.dx不会更新。this.dy

如果我像这样更改keyListener,它会起作用:

keyListener: function (e) {
    that = hero;
    that.dy = 100;
},

为什么 move 方法对 keyListener 有效,this但对 keyListener 无效?

4

2 回答 2

2

在 JavaScript 中,this默认情况下不绑定到对象;它是由上下文设置的。在这种情况下,thisdocument. 解决此问题的一种方法是绑定函数,使其this始终为hero

document.onkeydown = hero.keyListener.bind(hero);

注意:bind仅在更新的浏览器中可用。

于 2012-05-19T02:34:50.003 回答
1

JavaScript 中的this运算符并不总是遵循您期望的范围规则。

这篇文章将有助于解释发生了什么:http ://unschooled.org/2012/03/understanding-javascript-this/

于 2012-05-19T02:35:51.003 回答