背景Webstorm:记住吸气trickers警告有关 “只读属性”
当我使用一个memorized getter这样的:
var myModule = {
get foo() {
delete this.foo;
return this.foo = 'something'
}
};
在Webstorm
我收到警告:
属性为只读
问题
为什么我得到这个警告,我可以让它消失吗?
背景Webstorm:记住吸气trickers警告有关 “只读属性”
当我使用一个memorized getter这样的:
var myModule = {
get foo() {
delete this.foo;
return this.foo = 'something'
}
};
在Webstorm
我收到警告:
属性为只读
问题
为什么我得到这个警告,我可以让它消失吗?
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应该认识到制定者,因此不会显示警告。
谢谢@Oriol – rabbitco
你可以禁止WebStorm的自省是这样的:
var myModule = {
get foo() {
delete this.foo;
//noinspection JSUnresolvedVariable
return this.foo = 'something'
}
};
但我认为这是一个不好的做法,这样做,你应该避免这样做,除非你真的不得不这样做。
我是怎么找到它的? WebStorm具有包含几乎所有警告和错误有益的建议整齐lightblub通过Alt + Enter键:
谢谢@Tamas Hegedus。你的回答很有帮助,我宁愿选中这个标记。不幸的是,我只能选择一个,另一个答案包含“为什么”和“如何修复”。因此,尽管我根据使用哪种方法来修复问题进行了划分,但检查标记似乎最公平。 – rabbitco
它可能不会考虑到您首先删除属性。不知道如何使它不显示警告。 –
有趣的方式来定义一个懒惰的火 - 一次吸气。以前从未见过 - 如果webstorm感到困惑,阅读代码的人会感到困惑(起初我也是如此)。也许你可以用普通的“私人”成员来保持状态。 –
Webstorm对代码进行静态分析 - 这需要进行动态分析我认为 –