类内部调用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
相关产品推荐
相关产品推荐

