JS中这样尝试使用getter和setter为什么报错内存溢出

let user = {
  get name() {
    return 'mary';
  },

  set name(value) {
    this.name = value //这句话报错了
  }
};
user.name = "Peter"; //尝试赋值的时候报错Uncaught RangeError: Maximum call stack size exceeded
console.log(user.name);
阅读 4.1k
4 个回答

this.name = value
这里会走setter
setter又
this.name = value了
无限循环了

set里调用set,无限重复了

赋值给一个中间变量中转一下就好了

自问自答一下,因为在set里,this.name = value又调用了一次set,就变成循环调用了。解决方法是,在对象里再申明一个内部变量就行了

var obj = {
    _name: '',
    get name() {
        return this._name || 'mary'
    },
    set name(value) {
        this._name = value
    }
}
console.log(obj.name) //mary
obj.name = 'peter'
console.log(obj.name) //peter
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题