前端技术(更新中)

yuanheci 2025年01月13日 8次浏览

js 中的 this

add_listening_events() {
       let outer = this;
       this.playground.game_map.$canvas.on("contextmenu", function() {
          return false;
        });

这里为什么要定义一个outer,外面的this和回调函数中的不同吗?
  在JavaScript中,this的值取决于函数的调用方式。在事件处理函数(如on(“contextmenu”, function() { … }))中,this通常会指向触发事件的DOM元素,而不是原来的对象(在这里是outer所指向的对象)。

更好的写法(使用箭头函数):
如果你使用箭头函数,就不需要定义outer,因为箭头函数不会改变this的指向:

add_listening_events() {
    this.playground.game_map.$canvas.on("contextmenu", () => {
        this.handleRightClick(); // 直接使用this,指向原来的对象
        return false;
    });
}

箭头函数中的this会继承外层作用域的this,因此可以直接访问原来对象的属性和方法。