无法让setter / getters工作

时间:2016-05-05 13:20:45

标签: javascript ecmascript-6

我想将Mike Herchel的Importing CSS Breakpoints转换为ES6课程。为此,我选择使用getset来最终学习如何。

到目前为止我的代码:

export default class Breakpoints {
  constructor() {
    this.value = null;

    this.refreshValue();

    window.addEventListener('resize', () => {
      this.refreshValue();
    });
  }

  refreshValue() {
    let val = window.getComputedStyle(document.querySelector('body'), ':before').getPropertyValue('content').replace(/\"/g, '');

    this.value = val;
  }

  set value(val) {
    this.value = val;
  }

  get value() {
    return this.value;
  }
}

问题是,当我运行它时,我得到Maximum call stack size exceeded。我哪里出错了?

1 个答案:

答案 0 :(得分:4)

这里绝对没有理由使用getter / setter,除了普通的属性之外别无其他。

  

当我运行它时,我得到Maximum call stack size exceeded。我哪里出错了?

你的getter再次返回属性的值,从而调用自己。你的定居者再次设置属性的值,从而调用自己。不要那样做。

如果您出于某种原因真的想使用getter,请转到

export default class Breakpoints {
  constructor() {
    this._val = null;

    this.refreshValue();
    window.addEventListener('resize', () => {
      this.refreshValue();
    });
  }

  refreshValue() {
    this._val = window.getComputedStyle(document.querySelector('body'), ':before').getPropertyValue('content').replace(/\"/g, '');
  }

  get value() {
    return this._val;
  }
  // no `value` setter, because it can't be changed from outside
}