You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在事件监听器中访问类函数?遇TypeError: this.addEvent is not a function报错

解决事件监听器中访问类函数的问题

这个问题我之前也碰到过,主要是两个关键问题导致的:构造函数拼写错误,以及回调函数里的this指向不符合预期。我来一步步帮你解决:

1. 先修正构造函数的拼写错误

你代码里的construct()是拼写错误,ES6类的构造函数必须是constructor(),这个错误会导致this.events无法被正确初始化,甚至可能影响类实例的正常创建:

class TEST { 
  constructor(){ // 修正为constructor
    this.events = []; 
  } 

  // 假设这是你要调用的addEvent方法
  addEvent() {
    console.log('addEvent 执行了');
    // 这里可以写你的业务逻辑
  }
} 

2. 解决回调中this指向的核心问题

当你把回调函数传给addEventListener时,回调执行时的this默认指向触发事件的对象(这里是document),而不是你的TEST类实例,所以调用this.addEvent会抛出“不是函数”的错误。下面是几种常用的解决方案:

方案一:用bind()绑定this

在ready方法里,把回调函数的this绑定为当前TEST实例,这样回调执行时就能正确访问类的方法:

TEST.prototype.ready = function(callback) { 
  // 将回调的this绑定为当前TEST实例
  const boundCallback = callback.bind(this);
  
  if (document.readyState !== 'loading') {
    boundCallback(); 
  } else if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', boundCallback); 
  } else {
    document.attachEvent('onreadystatechange', boundCallback); 
  }
}

// 使用示例
const testObj = new TEST();
testObj.ready(function() {
  this.addEvent(); // 现在this指向testObj,能正常调用addEvent
});

方案二:用箭头函数继承外层this

箭头函数不会创建自己的this,它会继承外层作用域的this。你可以在调用ready时直接传入箭头函数作为回调:

const testObj = new TEST();
testObj.ready(() => {
  this.addEvent(); // 箭头函数的this继承自外层,指向testObj实例
});

方案三:在ready内部用变量保存实例的this

你也可以在ready方法里先把实例的this存到一个变量(比如self),然后在回调里用这个变量来访问类方法:

TEST.prototype.ready = function(callback) { 
  const self = this; // 保存当前实例的this
  const wrappedCallback = function() {
    callback.call(self); // 强制让回调的this指向self(TEST实例)
  };

  if (document.readyState !== 'loading') {
    wrappedCallback(); 
  } else if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', wrappedCallback); 
  } else {
    document.attachEvent('onreadystatechange', wrappedCallback); 
  }
}

总结

先修正构造函数的拼写错误,再通过绑定this、使用箭头函数或者保存实例引用的方式,确保回调函数执行时的this指向你的TEST类实例,就能正常调用addEvent方法了。

内容的提问来源于stack exchange,提问作者Lanibox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:52:49