【问题标题】:Javascript "onmousemove" event not working with classesJavascript“onmousemove”事件不适用于类
【发布时间】:2016-05-15 17:01:38
【问题描述】:

我真的不知道如何在标题中表达这一点,但我正在尝试创建一个包含所有事件函数的类,但我遇到了奇怪的问题。

这是问题的一些模拟代码。

class Mouse{
    constructor(){
        this.x = 0;
        this.y = 0;
    }
}

class MainClass{
    constructor(){
        this.mouse = new Mouse();
    }

    updateMouse(event){
        this.mouse.x = event.clientX;
        this.mouse.y = event.clientY;
    }
}

var mouse;
var main;

window.onload = function(){
    main = new MainClass();

    document.onmousemove = main.updateMouse;
}

我遇到的主要问题是,当我运行它时,它返回错误“无法设置未定义的属性'x'”,这很奇怪,因为当我逐步执行程序时 main.mouse.x 被定义,直到document.onmousemove 行。

如果我将 updateMouse() 函数移到 Mouse 类中,并改为这样做:

mouse = new Mouse();
document.onmousemove = mouse.updateMouse();

然后它可以工作,但是在我正在尝试编写的 ACTUAL 程序中,updateMouse() 方法需要调用 MainClass 中的其他方法,所以我不能这样做。

【问题讨论】:

    标签: javascript events undefined mouse onmousemove


    【解决方案1】:

    你必须使用

    window.onload = function(){
        main = new MainClass();
    
        document.onmousemove = main.updateMouse.bind(main); // bound function
    };
    

    试试看。如果您不绑定该函数,它会将“this”视为自身(文档对象)。

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多