variable programacion orientado objetos estatica es6 clase javascript oop ecmascript-6

programacion - static javascript



ES6: llamar al método estático dentro de una clase (3)

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á haciendo 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 el método estático se puede invocar 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.

Una vez más, sé que no es lo que pedía el detalle de la pregunta, pero esto podría ser útil para otras personas.

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.


Es lo mismo que llamar a un método en un objeto ordinario . Si llama al método GeneralHelper.isProd() , GeneralHelper estará disponible como this en el método, para que pueda usar

class 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 a GeneralHelper explícitamente cuando alguien hereda isProd de su clase y sobrescribe is , InheritedHelper.isProd() producirá otros resultados.

Si está buscando llamar a métodos estáticos desde métodos de instancia, consulte here . 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 plano.


Si llama a la función estática desde 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