如果我在webstorm中写这样的代码
export class someOne {
constructor(param) {
this.test = param;
}
useTest(){
return this.test;
}
}
console.log(new someOne(123).useTest());
将鼠标悬停在“this.test”上,我看到警告:“元素未导出”
这是什么意思? 如果我将
.test
更改为 .test1
,警告就会消失
对我来说,它可以用带前缀的下划线标记所有“私有”属性。显然 Webstorm/IntelliJ 认为这些属性不应该导出。
export class someOne {
constructor(param) {
this._test = param;
}
useTest(){
return this._test;
}
}
console.log(new someOne(123).useTest());
Webstorm 只是试图阻止您添加未指定的属性。您需要定义 getter/setter。这可以防止添加和获取属性作为肮脏的黑客行为。
更新 - 添加 WeakMap 以使变量真正私有。
let testWeakMap = new WeakMap();
export class someOne {
constructor(param) {
this.test = param;
}
useTest(){
return this.test;
}
get test () {
return testWeakMap.get(this);
}
set test (value) {
testWeakMap.set(this, value);
}
}
console.log(new someOne(123).useTest());
这是一个奇怪的错误消息,我怀疑是由 WebStorm 中的某些错误引起的。
我在 .mjs 文件的类中有这两种方法:
reports_elementIsNotExported_error ()
{ let abc = bad;
}
reports_unresolvedVariableOrType_error ()
{ let abc = bad77;
}
当我对此文件运行 WebStorm 检查时 第一个方法报告“元素未导出”。
第二个报告“类型为 bad77 的未解析变量”
我查看了 Node.js 的“global”,发现“bad”和“bad77”都不作为其字段存在。为什么“bad”会产生与“bad77”不同的消息,我不知道。