ES6 getter和setter奇怪的行为

时间:2016-03-05 12:15:05

标签: javascript ecmascript-6 babeljs

我与ES6 getter和setter混淆了。你能解释一下这里发生了什么,以及为什么我会发现堆栈溢出。

我在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

1 个答案:

答案 0 :(得分:4)

您在 val setter 中再次设置this.val,这会再次调用setter导致无限递归,只需将this.val替换为{ {1}}。这将解决问题:)

this._val