Un ejemplo atenuado es esta clase, que hereda de PublishableAction (para proporcionar la función estática .viewController() así como otros métodos que se usan donde está // ... ):
class Action extends PublishableAction { static actionSelector = { buttonCommit: Symbol() }; // This part still works as intended, accessing 'Action': static buttonSession = Action.viewController({ perform: Action.actionSelector.buttonCommit }); // ... but here's the issue: // ReferenceError: Cannot access 'Action' before initialization [Action.actionSelector.buttomCommit]() { // ... } } Ya intenté usar [this.actionSelector.buttonCommit]() y [this.constructor.actionSelector.buttonCommit]() , ambos sin tener ningún efecto en el resultado.
¿Cómo puedo corregir el ReferenceError sin tener que mover Action.actionSelector al alcance global?
Es un patrón un poco extraño lo que estás tratando de lograr. ¿Pero tal vez tener un captador de "métodos" y devolver allí todos los métodos invocables que se basan en actionSelector?
class Action extends PublishableAction { static actionSelector = { buttonCommit: Symbol() }; // This part still works as intended, accessing 'Action': static buttonSession = Action.viewController({ perform: Action.actionSelector.buttonCommit }); get methods() { return { [Action.actionSelector.buttonCommit]: function() { //... } }; } } De lo que puede llamar (new Action()).methods[Action.actionSelector.buttonCommit]()