Javascript "onmousemove"事件不适用于类

标签 javascript events undefined mouse onmousemove

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

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

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();

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

最佳答案

你必须使用

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

    document.onmousemove = main.updateMouse.bind(main); // bound function
};

尝试一下。如果您不绑定(bind)该函数,它将把“this”视为本身(文档对象)。

关于Javascript "onmousemove"事件不适用于类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241159/

相关文章:

javascript - 使用 Jquery 禁用和启用 Click 事件

jquery - 当单击表单内的链接时,如何停止触发表单的 ajax 事件?

Java SerialPortEvent 问题 : DATA_AVAILABLE calls faster then incoming data

PHP 和 undefined variable 策略

javascript - 在 JavaScript 和 TypeScript 中使用 !=

javascript - AngularJS 中 JSON 和 HTML 标签的日期格式

javascript - 更新 vue 组件数据中的数组

javascript - findOne Mongoose 查询无法正常工作

c# - 在子类中使用事件和委托(delegate)

JavaScript 空值检查