鍍金池/ 問答/HTML  Office/ JS中這樣嘗試使用getter和setter為什么報(bào)錯內(nèi)存溢出

JS中這樣嘗試使用getter和setter為什么報(bào)錯內(nèi)存溢出

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

  set name(value) {
    this.name = value //這句話報(bào)錯了
  }
};
user.name = "Peter"; //嘗試賦值的時候報(bào)錯Uncaught RangeError: Maximum call stack size exceeded
console.log(user.name);
回答
編輯回答
拼未來

set里調(diào)用set,無限重復(fù)了

2018年6月4日 21:34
編輯回答
失魂人

this.name = value
這里會走setter
setter又
this.name = value了
無限循環(huán)了

2017年12月20日 21:21
編輯回答
獨(dú)白

自問自答一下,因?yàn)樵?code>set里,this.name = value又調(diào)用了一次set,就變成循環(huán)調(diào)用了。解決方法是,在對象里再申明一個內(nèi)部變量就行了

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
2017年9月14日 11:07
編輯回答
你好胸

賦值給一個中間變量中轉(zhuǎn)一下就好了

2018年9月21日 23:42