2016-01-11 8 views
6

動的プロパティ:実ユースケースダイナミック(計算された)プロパティ

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

これは、もちろん非常に凝っています。しかし、誰かが不要な複雑さを加えることなくどこでこれを使うことができましたか

+1

価格+税またはそれに類するものを表すプロパティの値を計算することはできませんか? –

+1

@SamHolderこれは本当の動的プロパティですが、OPは動的なプロパティ名についての質問の例からのものです。 –

+1

正式な[JavaScriptオブジェクトリテラルのキーに変数を使用する](http://stackoverflow.com/q/2274242/1048572)とそのリンクされたすべての質問は、使用例の概要をご覧ください – Bergi

答えて

7

あなたは定数としてプロパティ名がある場合:私は、JSONのプロパティ名は、生成されたファイルで定義されたJavaクラスをオフに基づいていたところだった望んでいた

var obj = { [SOME_CONSTANT]: 42 }; 
6

一つのケースを。

// 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, 
    ... 
)); 
1

例えばあなたがオブジェクトの中のキーとして定数を使ってみたいときに使用できます。

const DATA_TYPE = { 
    PERSON: 'person', 
    COMPANY: 'company' 
}; 

let cache = { 
    [DATA_TYPE.PERSON]: getPerson() 
}; 

以降のアクセス:

cache[DATA_TYPE.PERSON] 

代わりのDATA_TYPE.PERSON(一部のリアルタイム計算値を含む)のものである可能性があります。

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 
} 
3

あなたはclassでそれを使用することができますし、 Symbols

class MyClass { 
    [Symbol.iterator]() { 
     // my iterator 
    } 
} 
関連する問題