Usar constantes como índices para matrices asociativas de Javascript

Estoy buscando crear una matriz asociativa en JS, pero uso constantes definidas como parte de la class como índices.

La razón por la que deseo esto es para que los usuarios de la class puedan usar las constantes (que definen events) para desencadenar acciones.

Algunos códigos para ilustrar:

STATE_NORMAL = 0; STATE_NEW_TASK_ADDED = 0; this.curr_state = STATE_NEW_TASK_ADDED; this.state_machine = { /* Prototype: STATE_NAME: { EVENT_NAME: { "next_state": new_state_name, "action": func } } */ STATE_NEW_TASK_ADDED : { // I'd like this to be a constant this.EVENT_NEW_TASK_ADDED_AJAX : { "next_state": STATE_NEW_TASK_ADDED, "action" : function() {console.log("new task added");}, } } } // Public data members. // These define the various events that can happen. this.EVENT_NEW_TASK_ADDED_AJAX = 0; this.EVENT_NEW_TASK_ADDED_AJAX = 1; 

Tengo problemas para hacer que esto funcione. No soy muy bueno con JS, pero parece que no importa lo que haga, la matriz se define con cadenas y no con constantes. ¿Hay alguna forma de forzar a la matriz a usar las constantes?

¡Gracias!

El problema aquí, en realidad, es que no puede usar un valor para la parte key cuando se define un object literalmente .

Es decir, PUEDES decir esto:

 var CONSTANT_A = 0, CONSTANT_B = 1, CONSTANT_C = 2; var state_machine = {}; state_machine[CONSTANT_A] = { ... }; state_machine[CONSTANT_B] = { ... }; 

Pero no puedes decir esto:

 var CONSTANT_A = 0, CONSTANT_B = 1, CONSTANT_C = 2; var state_machine = { CONSTANT_A: ..., CONSTANT_B: ... }; 

JavaScript le permite usar una "taquigrafía" para definir literales de objects donde puede omitir las comillas dobles alnetworkingedor de las teclas. Como tal, no puedes usar una expresión allí.

En ES6 puede usar valores calculados para keys de object.

 var CONSTANT_A = 0, CONSTANT_B = 1 var state_machine = { [CONSTANT_A]: function () { return 'a' }, [CONSTANT_B]: function () { return 'b' } }; console.log(state_machine)