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 siguiente línea?
GeneralHelper.is('prod'); En PHP hay self , static , etc. ¿ES6 proporciona algo similar a estos?
TY.
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();
Llame a métodos estáticos desde métodos de clase ES6 regulares
Es lo mismo que llamar a un método en un objeto ordinario . Si llama al método GeneralHelper.isProd() , GeneralHelper estará disponible this en el método, por lo que puede usar
class GeneralHelper { static is(env) { … } static isProd(){ return this.is('prod'); } } Sin embargo, esto no funcionará cuando el método se transmita como una función de devolución de llamada, como de costumbre . Además, puede ser diferente de acceder a GeneralHelper explícitamente cuando alguien hereda isProd de su clase y sobrescribe is , InheritedHelper.isProd() producirá otros resultados.
Si desea 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 usar un objeto simple en su lugar.
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 al método estático dentro de una clase", sonaba como "llamar a un método estático (desde un método no estático) dentro de una clase". Definitivamente no es 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ía el detalle de la pregunta, pero esto podría ser útil para otras personas.