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

类内部调用setter报错:TypeError: this._arg不是函数

问题分析与解决

你碰到的TypeError: this._arg is not a function错误,核心原因是你把setter访问器当成函数来调用了——setter本质是用来处理属性赋值的,不是可调用的方法。

错误点拆解

在你的代码里,你定义了set _arg(value),这意味着this._arg是一个访问器属性,要触发setter逻辑,你需要用赋值语句this._arg = _argx,而不是像函数那样加括号调用this._arg(_argx)。后者会把this._arg当作函数去执行,但它其实是个属性,自然会报错。

修正后的代码

class temp {
  constructor(_argx) {
    // 用赋值操作触发setter,而不是函数调用
    this._arg = _argx;
    console.log(this.arg);
  }
  get _arg() {
    return this.arg;
  }
  set _arg(value) {
    this.arg = value;
  }
}
let v = new temp({ 'foo': 'bar'});

额外优化建议

你的代码里访问器命名_arg和内部存储属性arg有点容易混淆,通常社区的最佳实践是:把内部私有存储的属性加下划线前缀,访问器用不带下划线的名称,这样代码可读性更强:

class temp {
  constructor(argx) {
    this.arg = argx; // 赋值触发setter
    console.log(this.arg);
  }
  // 访问器对应公开的arg属性
  get arg() {
    return this._arg;
  }
  set arg(value) {
    this._arg = value; // 内部存储用带下划线的变量
  }
}
let v = new temp({ 'foo': 'bar'});

总结一下:类内部完全可以调用setter,只是要通过属性赋值的方式触发,而不是当作函数调用。

内容的提问来源于stack exchange,提问作者Jérémie Bazin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:38