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);
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);
自问自答一下,因为在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
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
this.name = value
这里会走setter
setter又
this.name = value了
无限循环了