2016-03-07 67 views
3

背景Webstorm:记住吸气trickers警告有关 “只读属性”

当我使用一个memorized getter这样的:

var myModule = { 

    get foo() { 
     delete this.foo; 
     return this.foo = 'something' 
    } 
}; 
在Webstorm

我收到警告:

属性为只读

问题

为什么我得到这个警告,我可以让它消失吗?

+0

它可能不会考虑到您首先删除属性。不知道如何使它不显示警告。 –

+1

有趣的方式来定义一个懒惰的火 - 一次吸气。以前从未见过 - 如果webstorm感到困惑,阅读代码的人会感到困惑(起初我也是如此)。也许你可以用普通的“私人”成员来保持状态。 –

+0

Webstorm对代码进行静态分析 - 这需要进行动态分析我认为 –

回答

1

WebStorm似乎表明了警告,因为分配为存取没有setter属性在非严格被忽略模式并进入严格模式。

如果您想要更改foo的值,但该吸气剂尚未被调用,那么确实可能会出现问题。

因此,更好的做法可以定义一个setter太

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

然后WebStorm应该认识到制定者,因此不会显示警告。

+0

谢谢@Oriol – rabbitco

0

你可以禁止WebStorm的自省是这样的:

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

但我认为这是一个不好的做法,这样做,你应该避免这样做,除非你真的不得不这样做。

我是怎么找到它的? WebStorm具有包含几乎所有警告和错误有益的建议整齐lightblub通过Alt + Enter键

enter image description here

+0

谢谢@Tamas Hegedus。你的回答很有帮助,我宁愿选中这个标记。不幸的是,我只能选择一个,另一个答案包含“为什么”和“如何修复”。因此,尽管我根据使用哪种方法来修复问题进行了划分,但检查标记似乎最公平。 – rabbitco