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

时间:2014-09-28 18:45:08

标签: javascript oop javascript-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不是函数”。问题是“为什么会这样?”解释会很棒!

提前感谢。

1 个答案:

答案 0 :(得分:4)

您需要确保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更改。