背景
当我像这样使用memorized getter时:
var myModule = {
get foo () {
delete this.foo;
return this.foo = 'something'
}
};
在Webstorm中我收到警告:
属性是只读的
问题
为什么我会收到此警告,是否可以让它消失?
答案 0 :(得分:1)
你可以像这样压制WebStorm的内省:
var myModule = {
get foo () {
delete this.foo;
//noinspection JSUnresolvedVariable
return this.foo = 'something'
}
};
但我认为这样做是不好的做法,除非你真的需要,否则你应该避免这样做。
我是如何找到它的? WebStorm有一个整洁的光俱乐部,包含 Alt + Enter 几乎所有警告和错误的有用建议:
答案 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应该识别设置者,因此不会显示警告。