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

Getter/Setter失效:调用getter触发Uncaught TypeError错误求助

解决Getter调用错误:Uncaught TypeError: item.name is not a function

这个错误的原因很简单——你把ES6的getter当成方法来调用了!

问题分析

你在Item类里用get name()定义的是访问器属性,它的作用是让你像访问普通属性一样获取_name的值,而不是作为函数去调用。当你写x.name()时,JS会尝试把name这个属性当作函数执行,但实际上它只是一个返回值的属性,自然就会抛出“不是函数”的错误。

修正后的代码

只需要去掉调用时的括号即可:

class Item { 
  constructor(n) {this._name = n}; 
  get name() {return this._name}; 
}
var x = new Item('test')
var newItem = 'New Item: '+x.name // 这里去掉括号
console.log(newItem) // 输出 "New Item: test"

额外补充:Setter的正确用法

如果之后你要定义setter,同样也是作为属性赋值,而不是函数调用。比如:

class Item { 
  constructor(n) {this._name = n}; 
  get name() {return this._name}; 
  set name(newName) {this._name = newName}; 
}
var x = new Item('test')
x.name = 'Updated Test' // 直接赋值,不用写成x.name('xxx')
console.log(x.name) // 输出 "Updated Test"

记住:getter/setter本质是属性的语法糖,调用方式和普通属性一致,不需要加括号~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:06:07