javascript - 在面向对象的 Javascript 中,将对象成员方法传递给事件处理程序

标签 javascript oop dom-events

在 Javascript 中我定义了一个像这样的对象:

function myObject() {
    this.x = 5;
    window.addEventListener("resize", this.resizeHandler);
}

myObject.prototype.doSomething = function() {
    alert(this.x);
}

myObject.prototype.resizeHandler = function() {
    this.doSomething();   // Here occurs error.
}

var obj = new myObject();

但是我遇到了错误消息:

"Uncaught TypeError: undefined is not a function".

问题是“为什么会这样?”解释一下就太好了!

最佳答案

您需要确保this的上下文正确...

function myObject() {
    this.x = 5;
    window.addEventListener("resize", this.resizeHandler.bind(this));
}

myObject.prototype.doSomething = function() {
    alert(this.x);
}

myObject.prototype.resizeHandler = function() {
    this.doSomething();   // Here occurs error.
}

这里使用了.bind(this)

用作事件处理程序的函数中的 this 发生变化。

关于javascript - 在面向对象的 Javascript 中,将对象成员方法传递给事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088319/

相关文章:

javascript - 为什么 `' onhashchange' in window` 在 IE8 的 IE7 兼容模式下返回 `true`?

Javascript onmouseup 事件未按预期触发

javascript - 确定回调是否正在使用所有参数

javascript - React 与 MobX 中的单向数据流

javascript - 如果文本超过一定长度则应用 CSS

javascript - 如何在 Bootstrap 4 .btn-group-toggle 上显示 JavaScript 验证错误

java - 场景应该删除图层还是图层自行删除?

c# - C#中,当一个变量经过一个函数/方法时,原来的变量会不会改变?

python - 如何在 python 函数中将对象的实例作为参数传递?

c# - Ratingcontrol 给 Javascript :void(0)