web-dev-qa-db-fra.com

Existe-t-il un polyfill pour la fonction es6 arrow?

Existe-t-il une fonction polyfill pour es6 arrow? 

le code suivant lève une exception d'erreur de syntaxe dans IE, existe-t-il un polyfill pour que IE prenne en charge les fonctions de flèche?

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

Note : Je ne veux pas utiliser de transpiler.

Merci d'avance

8
Rana

Il n'y a pas de polyfill pour les fonctions de flèches. C'est une erreur de syntaxe d'écrire le code que vous avez sauf si vous utilisez un transpiler.

6
Chris Cousins

Un polyfill peut ajouter ou corriger des classes, des fonctions, des objets, mais il ne peut pas modifier la syntaxe acceptée du compilateur.

4
Pablo Lozano

Je suis plutôt écolo avec JS, alors j’ai le sentiment que cela n’est peut-être pas qualifié de remplissage multiple ... mais cela semble être un palliatif. J'ai trouvé un violon fabriqué par Luis Perez qui donne cette fonctionnalité. Je travaille toujours à mieux comprendre les fonctions de flèche, mais cela fonctionne au moins avec l'un des exemples de fonction de flèche MDN . Voici l'extrait qui, après avoir joué avec, j'ai réussi à comprendre (mieux au moins) lol. J'espère que c'est utile à quelqu'un.

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

Les fonctionnalités qui ajoutent une nouvelle syntaxe ne peuvent pas être remplies.

Je ne peux penser qu'à babel-standalone , que vous pouvez considérer comme un compilateur/transpiler JIT (si cela vous convient).

0
PeterMader