2015-02-16 15 views
6

stavo leggendo il codice sorgente di Facebook-dati-tavola fissa, e ho trovato thisJavaScript: var {left, ... props} = this.props;

var {left, ...props} = this.props; 

Cosa che significa? è questo un nuovo semantico? Sono confuso o.O

+2

E 'ES6 assegnazione destrutturazione. – Pointy

+0

possibile duplicato di [Is var {Route, Redirect, RouteHandler, Link} = Router; valido in Javascript?] (http://stackoverflow.com/questions/27136394/is-var-route-redirect-routehandler-link-router-valid-in-javascript) –

+0

@ Qantas94Heavy, non è proprio un duplicato perché l'altro la domanda non menziona il resto destrutturante. – FakeRainBrigand

risposta

12

È una forma speciale di assegnazione destrutturazione proposed for ES7 (e implementata con impazienza negli strumenti jsx e Babel). Crea due variabili: left e props.

left ha il valore di this.props.left.

props è un oggetto con tutte le altre proprietà di this.props (escluso left).

Se hai scritto senza destrutturazione che sarebbe simile a questa:

var left = this.props.left; 
var props = {}; 

Object.keys(this.props).forEach(function(key, index){ 
    if (key !== 'left') { 
     props[key] = this.props[key]; 
    } 
}, this); 

che è più di un paio di caratteri rasati :-)

+0

Puoi fornire un link per questo tipo di "destrutturazione del riposo"? Almeno per me non funziona a Traceur. –

+0

https://people.mozilla.org/~jorendorff/es6-draft.html#sec-destructuring-assignment (edit: and 12.14.5.4) – FakeRainBrigand

+0

Questo riferimento non descrive la sintassi qui. Descrive una sintassi per l'assegnazione destrutturante che coinvolge gli array, come in 'var [a, ... b] = [1, 2, 3]'. Non ho mai visto la sintassi mostrata qui, il che non vuol dire che non esiste ... –

Problemi correlati