我对ES6 getters和setters感到困惑。你能解释一下这里发生了什么以及为什么我得到堆栈溢出吗?
我在 Node.JS v5.1.1 上运行它
'use strict';
class List {
constructor(next, val) {
this.next = next;
this.val = val;
}
set val(v) {
this.val = v;
}
get val() {
return this.name;
}
}
let res = new List(null, 1);
res.val = 3;
console.log(res);
下面是输出:
/Users/o/code/test/test.js:9
set val(v) {
^
RangeError: Maximum call stack size exceeded
您在 val setter 中再次设置this.val
,通过再次调用 setter 会导致无限递归,只需将this.val
替换为 this._val
即可。这将解决问题:)
class List {
constructor(next, val) {
this.next = next;
this._val = val;
}
set val(v) {
this._val = v;
}
get val() {
return this.name;
}
}