2016-05-23 12 views
1

Ich habe den folgenden Code, die ich erhielt:Spread-Operator alternative

function sortByProp(...props) { 
    const callback = props.pop(); 
    return function(a, b) { 
    const v1 = retrieve(props, a); 
    const v2 = retrieve(props, b); 
    return callback(v1, v2); 
    } 
} 

Es funktioniert großartig in den meisten Browsern, aber nicht in der Oper. Ich erhalte die folgende Fehlermeldung:

function sortByProp(...props) { 
        ^^^ 
SyntaxError: Unexpected token ... 

Ich besuchte https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator zu sehen, ob es eine Alternative ist, um zu sehen, ob es eine polyfill hierfür ist, aber ich kann man nicht finden.

ich diese Funktion aufrufen diese beiden mit:

.sort(sortByProp('key', 'k', a)) 
      .sort(sortByProp('key', 'n', b)); 

Wie kann ich es so machen, dies in allen Browsern funktionieren wird?

+0

Entfernen Sie "... Requisiten", fügen Sie 'var Requisiten = Argumente;'? Eigentlich muss vielleicht in ein Array konvertiert werden, also '[] .slice.call (Argumente);' –

Antwort

3

Sie können Syntax nicht polyfill. Es funktioniert einfach nicht. Die Syntaxprüfung findet statt, bevor eine Logik von einem Polyfill auftreten kann. Sie können Compiler wie Babel verwenden, um Ihren ES2015-Code in ES5 zu konvertieren. Oder Sie können Ihre Funktion umschreiben: arguments:

function sortByProp() { 
    var props = [].slice.call(arguments); 
    const callback = props.pop(); 
    return function(a, b) { 
    const v1 = retrieve(props, a); 
    const v2 = retrieve(props, b); 
    return callback(v1, v2); 
    } 
} 
+0

Genau das, was ich gesucht habe danke! – user2924127