Javascript methods: this & that

Javascript methods: this & that

本文关键字:amp that this methods Javascript      更新时间:2023-09-26

这里是第一个问题。

我正在尝试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;
    }   
};

移动方法更新this.dx但 keyListener 不会在按下某个键时更新this.dy

如果我像这样更改键侦听器,它可以工作:

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

为什么 move 方法适用于this而不适用于 keyListener?

在 JavaScript 中,默认情况下this不绑定到对象;它是通过上下文设置的。在这种情况下,this将是 document .解决此问题的一种方法是绑定函数,以便始终hero this

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

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

JavaScript

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

本文将有助于解释正在发生的事情:http://unschooled.org/2012/03/understanding-javascript-this/