我有一个如下课程:
const Module = {
Example: class {
constructor(a) {
this.a = a;
}
static fromString(s) {
// parsing code
return new Module.Example(a);
}
}
}
到目前为止,这是有效的,但是通过全局名称Module.Example
访问当前的类构造函数是一种丑陋的,容易破坏。
在PHP中,我会在这里使用new self()
或new static()
来引用定义静态方法的类。在Javascript中是否有这样的东西并不依赖于全局范围?
答案 0 :(得分:13)
您可以在静态方法中使用this
。它将引用类本身而不是实例,因此您可以从那里实例化它。所以:
const Module = {
Example: class Example {
constructor(a) {
this.a = a;
}
static fromString(s) {
// parsing code
return new this(s);
}
}
}
console.log(Module.Example.fromString('my str')) // => { "a": "my str" }