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

ES6:类中内部局部函数访问类this的简单解决方案

解决ES6构造函数内局部函数访问类方法的问题

嘿,我完全懂你的困扰——构造函数里的局部普通函数没法正确访问类实例的this,导致调用类方法时出错对吧?其实不用纠结那些复杂的闭包解释,有两个超简单的方案就能搞定:

方案一:用箭头函数代替普通局部函数

箭头函数不会绑定自己的this,它会直接继承外层作用域(也就是构造函数)的this,刚好就是我们需要的类实例对象。修改后的代码如下:

class Example {
  constructor() {
    // 换成箭头函数
    const functionWhichRequiredInConstructorOnly = () => {
      return this.methodWhichRequredAnywhere() + ' complete';
    }
    this.message = functionWhichRequiredInConstructorOnly();
  }

  methodWhichRequredAnywhere() {
    return 'test';
  }
}

这样调用functionWhichRequiredInConstructorOnly()时,里面的this就指向当前的Example实例,自然能正常调用methodWhichRequredAnywhere()了。

方案二:提前保存类实例的this到变量

如果更习惯用普通函数,也可以提前把构造函数里的this存成一个不会被函数改变的变量(比如self或者that),然后在局部函数里用这个变量访问类方法:

class Example {
  constructor() {
    // 把类实例的this存起来
    const self = this;
    function functionWhichRequiredInConstructorOnly() {
      // 用self代替this
      return self.methodWhichRequredAnywhere() + ' complete';
    }
    this.message = functionWhichRequiredInConstructorOnly();
  }

  methodWhichRequredAnywhere() {
    return 'test';
  }
}

普通函数的this是在调用时确定的,直接调用它的话this会指向全局对象(严格模式下是undefined),但我们提前保存的self始终指向类实例,所以就能顺利访问到类方法了。

这两个方案都很直观,完全不用搞复杂的闭包操作,选你顺手的用就行~

内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:57