Webstorm:记忆中的getter trickers警告“只读属性”

时间:2016-03-07 21:22:31

标签: javascript webstorm

背景

当我像这样使用memorized getter时:

var myModule = {

    get foo () {
        delete this.foo;
        return this.foo = 'something'
    }
};
在Webstorm中我收到警告:

  

属性是只读的

问题

为什么我会收到此警告,是否可以让它消失?

2 个答案:

答案 0 :(得分:1)

你可以像这样压制WebStorm的内省:

var myModule = {
    get foo () {
        delete this.foo;
        //noinspection JSUnresolvedVariable
        return this.foo = 'something'
    }
};

但我认为这样做是不好的做法,除非你真的需要,否则你应该避免这样做。

我是如何找到它的? WebStorm有一个整洁的光俱乐部,包含 Alt + Enter 几乎所有警告和错误的有用建议:

enter image description here

答案 1 :(得分:1)

WebStorm似乎显示警告,因为在非严格模式下忽略没有setter的访问者属性的赋值,并以严格模式抛出。

如果你想改变foo的值但是还没有调用getter,那确实可能是一个问题。

因此,更好的做法是定义一个setter

var myModule = {
  set foo (val) {
    delete this.foo;
    this.foo = val;
  },
  get foo () {
    delete this.foo;
    return this.foo = 'something';
  }
};

然后WebStorm应该识别设置者,因此不会显示警告。