真实用例动态(计算)属性

时间:2016-01-11 18:16:37

标签: javascript ecmascript-6

动态属性:

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

这当然非常花哨。但有人可以在哪里使用它而不会增加不必要的复杂性?

5 个答案:

答案 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)

您可以在classSymbols中使用它:

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可以是任何东西(包括一些实时计算值)。