2012-04-27 17 views
5

Stavo guardando attraverso il codice da un'estensione per Firefox (qui: https://github.com/mozilla/prospector/blob/master/oneLiner/bootstrap.js#L34) e ho visto qualcosa che non avevo mai visto prima in javascript. Il programmatore ha usato un array associativo come nome della variabile. Qualcuno potrebbe spiegarmi come funziona questo riferimento alle variabili?Utilizzo di un array associativo come nome di variabile? - javascript

const {classes: Cc, interfaces: Ci, utils: Cu} = Components; 

Capisco la "const" dalla lettura di questa pagina: https://developer.mozilla.org/en/JavaScript/Reference/Statements/const

ma come è in grado di utilizzare un oggetto array associativo come un nome di variabile?

Inoltre, sembra che si stiano utilizzando i nomi dei tasti nell'array associativo come riferimenti ai metodi Components (elencati qui: https://developer.mozilla.org/en/Components_object). Ho sempre pensato che fosse necessario prima il nome di una chiave e poi il valore, ma questo sembra mettere il valore del riferimento al metodo delle classi Components prima e poi assegnarlo a un nome di Cc anche se Cc è nel punto in cui un valore andrebbe (e metodo Ci per le interfacce componenti metodo & Cu per componenti utils).

+2

In JavaScript, il termine usuale per ciò che si' Ho chiamato un "array associativo" è solo "oggetto" (o talvolta "mappa" o "dizionario"). Evitiamo di dire "array associativo" perché confonde le persone meno informate che pensano che si riferisca al tipo "Array". –

+2

possibile duplicato di [Dichiarazione costante con blocco] (http://stackoverflow.com/questions/10199229/constant-declaration-with-block) –

risposta

6

Quello che state vedendo è un assegnamento destrutturato, è disponibile dal JavaScript 1.7 vedere questa documentazione per ulteriori informazioni https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7

assegnamento destrutturato consente di estrarre dati da array o oggetti utilizzando una sintassi che gli specchi la costruzione di array e letterali dell'oggetto . Le espressioni letterali dell'oggetto e dell'array forniscono un modo semplice per creare pacchetti di dati ad-hoc. Dopo aver creato questi pacchetti di dati , puoi utilizzarli come preferisci. È anche possibile restituirli dalle funzioni.

+0

Big +1. E a quanto pare, ECMAScript6 avrà * qualche * tipo di incarico di destrutturazione, sebbene non possa (o possa) essere pienamente compatibile con Mozilla. –

+0

Grazie per il link. Avevo cercato su google prima di pubblicare ma non mi è venuto in mente nulla. Questo esempio sembra spiegarlo abbastanza bene: https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7#Looping_across_values_in_an_array_of_objects Sembra ancora strano scambiare la chiave: valore attorno però. – Yansky

0

Sì, check this out:

var abc = {classes: "ABC", interfaces: "DEF", utils: "XYZ"}; 
const {classes: Cc, interfaces: Ci, utils: Cu} = abc; 
console.debug("test: ", Cc, Ci, Cu); 

Sembra un sacco di divertimento, soprattutto per quello che sta leggendo il codice :)

+0

Il punto peggiore è che è compatibile solo con Firefox. Quindi in pratica costringi il tuo lettore ad imparare (e tenere separato) una lingua diversa. –

+0

Bene, ho provato questo [collegamento] (http://therelentlessfrontend.com/2010/10/02/how-to-get-the-javascript-version/) e mi ha detto che anche il mio chrome supporta 1.7, e firefox - 1.8, ma questa affermazione non funziona in chrome ... inoltre, IE9 supporta solo 1.3: D – Igor

Problemi correlati