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
相关产品推荐
相关产品推荐

