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

类中调用作为参数的方法时无法访问类字段,原因是什么?

问题原因分析

这个报错的核心是类方法的this绑定丢失,具体细节如下:

  • 类内部默认运行在严格模式下,类的方法本身并不会自动绑定当前实例的this。当你在constructor里把this.func1、this.func2作为参数传给compose2时,传递的仅仅是函数本身,原有的与Test实例的绑定关系被切断了。
  • 在compose2的reduce回调里直接调用nextFunc()属于普通函数调用,严格模式下这种调用的this会是undefined,自然无法读取this.field1这类实例属性,触发报错。
  • 非类写法能正常运行的原因:如果是用对象字面量创建的非类结构,若处于非严格模式,普通函数调用的this会指向全局对象(浏览器环境为window);或者调用时直接通过对象引用调用(比如obj.func1()),this会绑定到对象。但类强制启用严格模式,不存在这个“兜底”的全局this。

常见修复方式

  • 在传递方法时手动绑定this:this.compose2(this.func1.bind(this), this.func2.bind(this), this.func3.bind(this))
  • 把方法定义为箭头函数,箭头函数会继承外层作用域的this:
    func1 = () => {
      console.log("init func1");
      console.log(this.field1.data);
    }
    
  • 在调用时用call/apply绑定this:nextFunc.call(this)

内容的提问来源于stack exchange,提问作者김찬기

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:45:07