Tengo esta clase que hace una llamada interna a un método estático:
export class GeneralHelper extends BaseHelper{
static is(env){
return config.get('env:name') === env;
}
static isProd(){
return GeneralHelper.is('prod');
}
}
¿Hay alguna palabra clave que pueda usar para reemplazar el nombre de la clase en la línea a continuación?
GeneralHelper.is('prod');
En PHP hay self
, static
etc. ¿ES6 proporciona algo similar a estos?
TY.
javascript
oop
ecmascript-6
Shlomi
fuente
fuente
Respuestas:
Si está llamando a la función estática desde dentro de una instancia, la forma correcta de referirse a la función estática de la clase es:
this.constructor.functionName();
es6 llamar a métodos estáticos
fuente
this.constructor.is('prod')
arrojaría error en este caso.this.method()
. Además, cuando extiendes una clase, llamassuper.method()
Es lo mismo que llamar a un método en un objeto ordinario . Si llama al
GeneralHelper.isProd()
método,GeneralHelper
estará disponible comothis
en el método, por lo que puede usarclass GeneralHelper { static is(env) { … } static isProd(){ return this.is('prod'); } }
Sin embargo, esto no funcionará cuando el método se pase como una función de devolución de llamada, como de costumbre . Además, puede ser diferente de acceder
GeneralHelper
explícitamente cuando alguien heredaisProd
de su clase y sobrescribeis
,InheritedHelper.isProd()
producirá otros resultados.Si está buscando llamar a métodos estáticos desde métodos de instancia, consulte aquí . También tenga en cuenta que una clase que solo define métodos estáticos es un bicho raro, es posible que desee utilizar un objeto simple en su lugar.
fuente
this
comporta. No funciona comothis
en otros idiomas.this
no se puede usar antes de la super llamada).constructor(){ CLASS_NAME.STATIC_METHOD(); }
Ambas respuestas aquí son correctas y buenas, pero quería agregar un detalle adicional basado en el título de esta pregunta.
Cuando vi "ES6 - Llamar a un método estático dentro de una clase" sonó como "llamar a un método estático (desde un método no estático) dentro de una clase". No defina lo que el autor de la pregunta inicial está preguntando en los detalles.
Pero para cualquiera que quiera saber cómo llamar a un método estático desde un método no estático dentro de una clase, puede hacerlo así:
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!"
La idea es que se pueda llamar al método estático sin crear una nueva instancia de la clase. Eso significa que puede llamarlo dentro del método de una instancia de la misma manera que lo llamaría fuera de la instancia.
Nuevamente, sé que eso no es lo que pedían los detalles de la pregunta, pero esto podría ser útil para otras personas.
fuente