wake-up-neo.com

Gibt es eine Polyfill-Funktion für die Es6-Pfeilfunktion?

Gibt es eine polyfill für die Es6-Pfeilfunktion? 

der folgende Code löst eine Syntaxfehlerausnahme im IE aus. Gibt es eine polyfill, damit IE Pfeilfunktionen unterstützt?

var myFunc = ()=>{
    alert('es6');
}
myFunc();

Hinweis : Ich möchte keine transpiler verwenden.

Danke im Voraus

8
Rana

Es gibt keine Füllfunktion für Pfeilfunktionen. Es ist ein Syntaxfehler, wenn Sie den Code schreiben, den Sie haben, sofern Sie keinen Transpiler verwenden.

6
Chris Cousins

Ein Polyfill kann Klassen, Funktionen und Objekte hinzufügen oder korrigieren, die akzeptierte Syntax eines Compilers jedoch nicht ändern.

4
Pablo Lozano

Ich bin ziemlich grün mit JS, daher habe ich das Gefühl, dass dies nicht als Polyfill qualifiziert wird ... aber es scheint eine Zwischenstation zu sein. Ich habe eine Geige von Luis Perez gefunden, die diese Funktionalität verleiht. Ich arbeite immer noch daran, die Pfeilfunktionen besser zu verstehen, aber es funktioniert zumindest mit einem der MDN-Pfeilfunktionsbeispiele . Hier ist der Ausschnitt, mit dem ich nach dem Spielen (zumindest besser) Lol verstanden habe. Ich hoffe es ist jemandem nützlich.

var str = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];

var g_arrowCache = Object.create(null);
function arrow(expression) {
  function cache(cache, key, getValueFunc) {
    var value = cache[key];
    
    if(value === undefined) {
        value = getValueFunc(key);
        cache[key] = value;
    }
    return value;
  }
  
  function arrowImpl(expression) {
    // This function is a polyfill for proposed "arrow functions" in JavaScript.
    // Example:  str.map(_$("str => str.length"))
    
    if (expression.search(/\bthis\b/) != -1) throw "'this' not supported";
    
    var indexOfArrow = expression.indexOf("=>");
    if(indexOfArrow == -1) throw "Expressio is missing the arrow operator =>";
    var parametersString = expression.substring(0, indexOfArrow);
    
    parametersString = parametersString.replace("(", "").replace(")", "");
    
    var parameters = parametersString.split(",");
    parameters.map(function(o) { return o.trim(); });
    
    var functionBody = expression.substring(indexOfArrow + 2);
    
    if(expression.indexOf("{") != -1) throw "Use of curly brackets for multiple statements not supported or recommended.";
    if(expression.indexOf("}") != -1) throw "Use of curly brackets for multiple statements not supported or recommended.";
    
    functionBody = "return " + functionBody.trim() + ";";
    var args = parameters.slice(0);
    args.Push(functionBody);
    var func = Function.constructor.apply(null, args);
    return func;
  }
  return cache(g_arrowCache, expression, arrowImpl);
}
var _$ = arrow;
console.log(str.map(_$("str => str.length")));

0
Cecell

Features, die eine neue Syntax hinzufügen, können nicht polyfilled werden.

Ich kann nur an babel-standalone denken, das man sich als JIT-Compiler/Transpiler vorstellen kann (wenn das in Ordnung ist).

0
PeterMader