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
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.
Un polyfill peut ajouter ou corriger des classes, des fonctions, des objets, mais il ne peut pas modifier la syntaxe acceptée du compilateur.
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")));
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).