动态属性:
var obj = {
// Computed (dynamic) property names
[ 'prop_' + (() => 42)() ]: 42
};
这当然非常花哨。但有人可以在哪里使用它而不会增加不必要的复杂性?
答案 0 :(得分:7)
如果您将属性名称作为常量:
var obj = { [SOME_CONSTANT]: 42 };
答案 1 :(得分:6)
我想要的一个案例是基于Java类在生成的文件中定义了JSON的属性名称。
// Generated
var SomeJsonBodyParams = {NAME: 'name', ID: 'id', ETA, 'estimatedTimeOfArrival'};
// Using it
sendAjax('some/url', {
[SomeJsonBodyParams.NAME] = userData.name,
...
});
我们甚至有一种方法,所以我们可以做到这一点
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,
...
));
答案 2 :(得分:3)
您可以在class
和Symbols中使用它:
class MyClass {
[Symbol.iterator]() {
// my iterator
}
}
答案 3 :(得分:2)
假设你有:
var hi = 'hi';
var test = 'test';
var hello = 'hello';
而不是:
var object = {};
object[hi] = 111;
object[test] = 222;
object[hello] = 333;
您可以用更短的语法编写它:
var object = {
[hi]: 111,
[test]: 222,
[hello]: 333
}
答案 4 :(得分:1)
E.g。当你想使用a,例如,常量作为对象中的键时,可以使用它。
const DATA_TYPE = {
PERSON: 'person',
COMPANY: 'company'
};
let cache = {
[DATA_TYPE.PERSON]: getPerson()
};
以后访问:
cache[DATA_TYPE.PERSON]
而不是DATA_TYPE.PERSON
可以是任何东西(包括一些实时计算值)。