Shl*_*son 70 javascript oop ecmascript-6
我有这个类对静态方法进行内部调用:
export class GeneralHelper extends BaseHelper{
static is(env){
return config.get('env:name') === env;
}
static isProd(){
return GeneralHelper.is('prod');
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用任何关键字来替换下面一行中的类名:
GeneralHelper.is('prod');
Run Code Online (Sandbox Code Playgroud)
在PHP中也有self
,static
等ES6是否提供类似这些东西吗?
TY.
Ber*_*rgi 47
它与在普通对象上调用方法相同.如果您调用该GeneralHelper.isProd()
方法,则该方法GeneralHelper
将可用this
,因此您可以使用
class GeneralHelper {
static is(env) { … }
static isProd(){
return this.is('prod');
}
}
Run Code Online (Sandbox Code Playgroud)
当该方法通过围绕一个回调函数然而,这将无法正常工作,只是像往常一样.此外,它可能与GeneralHelper
某人isProd
从您的类继承并覆盖时显式访问不同is
,InheritedHelper.isProd()
将产生其他结果.
如果您希望从实例方法调用静态方法,请参阅此处.另请注意,仅定义静态方法的类是一个古怪的类,您可能希望使用普通对象.
Chr*_*itz 25
这里的两个答案都是正确和好的,但我想基于这个问题标题添加一个额外的细节.
当我看到"ES6 - 在类中调用静态方法"时,它听起来像"在类中调用静态方法(来自非静态方法)".而不是最初的问题提问者在细节中提出的问题.
但对于任何想要知道如何从类中的非静态方法调用静态方法的人,您可以这样做:
class MyClass {
myNonStaticMethod () {
console.log("I'm not static.")
MyClass.myStaticMethod()
}
static myStaticMethod () {
console.log("hey, I'm static!")
}
}
MyClass.myStaticMethod() // will log "hey, I'm static!"
const me = new MyClass()
me.myNonStaticMethod() // will log "I'm not static" and then "hey, I'm static!"
Run Code Online (Sandbox Code Playgroud)
我们的想法是可以在不创建类的新实例的情况下调用静态方法.这意味着您可以在实例的方法中调用它,就像在实例外部调用它一样.
同样,我知道这不是问题的细节所要求的,但这可能对其他人有所帮助.