Característica dinámica (calculada) de caso de uso real

Una propiedad dinámica:

var obj = { // Computed (dynamic) property names [ 'prop_' + (() => 42)() ]: 42 }; 

Esto es, por supuesto, muy elegante. Pero, ¿dónde podría alguien usar esto sin agregar complejidad innecesaria?

Si tiene un nombre de propiedad como una constante:

 var obj = { [SOME_CONSTANT]: 42 }; 

Un caso donde lo quería era donde los nombres de propiedad para JSON se definían en files generados, basados ​​en classs de Java.

 // Generated var SomeJsonBodyParams = {NAME: 'name', ID: 'id', ETA, 'estimatedTimeOfArrival'}; // Using it sendAjax('some/url', { [SomeJsonBodyParams.NAME] = userData.name, ... }); 

Incluso teníamos un método, así que podíamos hacerlo

 function makeObj() { var obj = {}; for (var i=0; i < arguments.length; i+=2) { obj[i] = obj[i+i]; } return obj; } sendAjax('some/url', makeObj( SomeJsonBodyParams.NAME, userData.name, ... )); 

Puedes usarlo en class y con símbolos :

 class MyClass { [Symbol.iterator]() { // my iterator } } 

Digamos que tienes:

 var hi = 'hi'; var test = 'test'; var hello = 'hello'; 

En lugar de:

 var object = {}; object[hi] = 111; object[test] = 222; object[hello] = 333; 

Podrías escribirlo en una syntax mucho más corta:

 var object = { [hi]: 111, [test]: 222, [hello]: 333 } 

Por ejemplo, podría usarse cuando desee usar una, digamos, constante como una key en el object.

 const DATA_TYPE = { PERSON: 'person', COMPANY: 'company' }; let cache = { [DATA_TYPE.PERSON]: getPerson() }; 

Y luego acceso:

 cache[DATA_TYPE.PERSON] 

En lugar de DATA_TYPE.PERSON podría ser cualquier cosa (incluidos algunos valores calculados en time real).