2017-09-22 2 views
1

Gibt es eine polyfill für es6 Pfeilfunktion?Gibt es eine Polyfill für es6 Pfeilfunktion?

der folgende Code löst Syntax Fehler Ausnahme in IE, gibt es eine polyfill IE-Unterstützung Pfeilfunktionen machen?

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

Hinweis: Ich will nicht transpiler verwenden.

Vielen Dank im Voraus

+2

Diese Art von Funktionen, die nicht polifilled werden kann. – dfsq

+0

Der Grund dafür, dass transpilers existieren, ist, die Probleme zu lösen, die Polyfills nicht haben können. Was ist die Motivation, sie zu vermeiden? – loganfsmyth

+0

Ich habe einen vorhandenen Code (verteilt über die gesamte Unternehmensanwendung), der meine so viele Entwickler erstellt/geändert hat. Also möchte ich den Entwicklern nahtlos erlauben, es6 Funktionalitäten zu nutzen. – Rana

Antwort

4

Es gibt keine Polyfill für Pfeilfunktionen. Es ist ein Syntaxfehler, den Code zu schreiben, den Sie haben, es sei denn, Sie verwenden einen Transpiler.

0

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

+1

Klassen sind auch neue Syntax;) –

+0

Ich stimme nicht zu, neue Variablen erstellen ist keine neue Syntax hinzufügen –

+0

'Klasse Foo {}' kann nicht von Browsern geparst werden, die keine Klassen unterstützen. Aber jetzt, da ich den Beitrag noch einmal gelesen habe, denke ich, dass Sie die Funktionalität integrierter Klassen hinzufügen wollten (obwohl ich mir nicht sicher bin, ob es welche gibt)? Im Allgemeinen glaube ich einfach zu sagen, dass Polyfills * API * hinzufügen/reparieren können, ist weniger verwirrend. –

0

Funktionen, die eine neue Syntax hinzufügen, können nicht mehrfach ausgefüllt werden.

Ich kann nur an babel-standalone denken, die Sie sich als JIT-Compiler/Transpiler vorstellen können (wenn das bei Ihnen OK ist).

0

Ich bin ziemlich grün mit JS, so habe ich das Gefühl, dass dies nicht als eine Polyfill qualifizieren kann ... aber es scheint, ein "Klebeband" Stopglücke zu sein. Ich fand a fiddle von Luis Perez, die diese Funktionalität gibt. Ich arbeite immer noch daran, die Pfeilfunktionen besser zu verstehen, aber es funktioniert zumindest mit einem der MDN arrow function examples. Hier ist der Ausschnitt, den ich nach dem Spielen verstanden habe (besser zumindest) lol. Ich hoffe es ist nützlich für jemanden.

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")));

Verwandte Themen