2015-02-16 6 views
6

Ich las den Quellcode der Festdatentabelle des Facebook, und ich fand thisJavaScript: var {links, ... requisiten} = this.props;

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

Was das bedeutet? Ist das eine neue Semantik? Ich bin verwirrt o.O

+2

Es ist ES6 Destrukturierung Zuordnung. – Pointy

+0

mögliches Duplikat von [Ist var {Route, Redirect, RouteHandler, Link} = Router; gültig in Javascript?] (http://stackoverflow.com/questions/27136394/is-var-route-redirect-routehandler-link-router-valid-in-javascript) –

+0

@ Qantas94Heavy, Es ist nicht ganz ein Duplikat, weil das andere Frage erwähnt nicht Rest Destrukturierung. – FakeRainBrigand

Antwort

12

Es ist eine spezielle Form der Destrukturierung Aufgabe proposed for ES7 (und eifrig in den Jsx-Tools und Babel implementiert). Es erstellt zwei Variablen: left und props.

left hat den Wert this.props.left.

props ist ein Objekt mit allen anderen Eigenschaften von this.props (ohne left).

Wenn Sie es ohne Destrukturierung schrieb es so aussehen würde:

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

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

Das ist mehr als ein paar Zeichen :-) abrasiert

+0

Können Sie einen Link für diese Art von "Rest Destrukturierung" zur Verfügung stellen? In Traceur funktioniert es zumindest nicht für mich. –

+0

https://people.mozilla.org/~jorendorff/es6-draft.html#sec-destructions-assignment (bearbeiten: und 12.14.5.4) – FakeRainBrigand

+0

Diese Referenz beschreibt die Syntax hier nicht. Es beschreibt eine Syntax für die Destrukturierungsaufgabe mit Arrays, wie in 'var [a, ... b] = [1, 2, 3]'. Ich habe die hier gezeigte Syntax nie gesehen, was nicht heißen soll, dass sie nicht existiert ... –