ES6 获取者和二传手的奇怪行为



我对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;
  }
}

最新更新