2016-01-11 17 views
6

una proprietà dinamica:uso reale caso dinamico (calcolata) immobili

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

Questo è ovviamente molto di fantasia. Ma dove qualcuno potrebbe usarlo senza aggiungere inutili complessità?

+1

non potrebbe essere utilizzato per calcolare un valore di una proprietà che rappresenta il prezzo + tasse o simili? –

+1

@SamHolder Quella sarebbe una vera proprietà dinamica, ma l'OP sta parlando di nomi di proprietà dinamiche, dall'esempio nella domanda. –

+1

Dai un'occhiata al nostro canonico [Uso di una variabile per una chiave in un oggetto JavaScript letterale] (http://stackoverflow.com/q/2274242/1048572) e tutte le sue domande collegate per una panoramica dei casi d'uso – Bergi

risposta

7

Se si dispone di un nome di proprietà come una costante:

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

un caso in cui ho voluto che era il luogo dove i nomi di proprietà per JSON sono stati definiti nel file generati, in base al largo classi Java.

// Generated 
var SomeJsonBodyParams = {NAME: 'name', ID: 'id', ETA, 'estimatedTimeOfArrival'}; 

// Using it 
sendAjax('some/url', { 
    [SomeJsonBodyParams.NAME] = userData.name, 
    ... 
}); 

avevamo anche un metodo così potevamo tipo di farlo

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

Ad es potrebbe essere usato quando si vuole usare, diciamo, costante come una chiave nell'oggetto.

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

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

E l'accesso in seguito:

cache[DATA_TYPE.PERSON] 

Invece di DATA_TYPE.PERSON potrebbe essere qualsiasi cosa (tra cui alcuni valori calcolati in tempo reale).

2

Diciamo che avete:

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

Invece di:

var object = {}; 

object[hi] = 111; 
object[test] = 222; 
object[hello] = 333; 

si potrebbe scrivere in una sintassi molto più breve:

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

Si può usare in class e con Symbols:

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