【发布时间】:2017-12-05 17:49:04
【问题描述】:
我有一些代码:
//Main class
class Tools {
//Subclass implemented by static getter
static get SUPPORTED_UNITS () {
return class {
//Another one
static get Size () {
return class {
//Some data (constants in my case)
};
}
};
}
}
我想像Tools.SUPPORTED_UNITS.Size 一样使用它,并且我想收到一些数据作为它的结果。
我使用 WebStorm 编写 JavaScript 代码,所以当我尝试使用它时它会显示给我。
我不太清楚,也许我只是还没有对我的 WebStorm 进行一些设置,但是.. 我需要做的是我可以使用像 Class.Subclass.SubClassMethod/SubSubclass 这样的构造。
我需要那个:
- 这不是方法
- 它是静态的
- 它是不可变的(没有 Object.freeze 或类似的东西) - 所以我不能通过输入
Class.Subclass = foo;来更改我的Class.Subclass - 它由 IDE 编制索引 - 所以我从 IDE 获得了一些帮助(比如我输入
Class.Su而她建议使用Class.Subclass)
在 ES6 和 WebStorm 中是真的吗?或者也许我必须使用 ES7 和 Babel 或类似的东西?
附:该代码工作,但我需要来自 IDE 的建议,否则它将像地狱一样。
【问题讨论】:
-
由于代码是可行的并且没有使用 ES2016+ 的特性,你可以确定它是正确的 ES6,并且问题是特定于 IDE 的。代码没有解释为什么类应该被定义在inside一个方法中,这可能会导致XY问题。
-
如果只实现静态方法,请不要使用类。请改用普通对象:
const Tools = {SUPPORTED_UNITS: {Size: {}}}。如果需要,您也可以在对象上定义 getter。我建议阅读eloquentjavascript.net/04_data.html。此外,您实现的不是“子类”。子类通常是扩展基类的类。 -
@estus 我认为需要一个子类来使用不允许更改内部数据的 getter。也许我想错了(这很正常,因为我刚刚开始深入)。那么我需要如何编写我的类来使用不可变的静态数据呢?示例:
Tools.SUPPORTED_UNITS.Size我不能改变任何东西(写Tools.SUPPORTED_UNITS = foo)。谢谢 -
@FelixKling 感谢您的评论。所以你提议使用 const 对象来替换某种静态类? P.S. 当然是嵌套类,抱歉...
-
是的,那是正确的。添加 Object.freeze 品尝。您还可以重新考虑为什么您需要它是只读的。如果它真的没有任何帮助并导致额外的代码量,那就是奥卡姆剃刀的主题。
标签: javascript ecmascript-6 webstorm es6-class