es6箭头功能是否有polyfill
?
以下代码在IE中抛出语法错误异常,是否有polyfill
使IE支持箭头功能?
var myFunc = ()=>{
alert('es6');
}
myFunc();
注意:我不想使用任何transpiler
。
提前致谢
答案 0 :(得分:6)
箭头功能没有填充。除非您使用转换器,否则编写您拥有的代码会出现语法错误。
答案 1 :(得分:5)
polyfill可以添加或修复缺少的内置类,函数,对象......但它不能修改编译器接受的语法。
答案 2 :(得分:0)
添加新语法的功能无法进行多边形填充。
我只能想到babel-standalone,您可以将其视为JIT编译器/转换器(如果可以的话)。
答案 3 :(得分:0)
我对JS很绿,所以我觉得这可能不适合作为polyfill ......但它确实似乎是'胶带'的权宜之计。我发现由a fiddle制作的Luis Perez提供了此功能。我仍在努力更好地理解箭头功能,但它至少可以与MDN arrow function examples之一一起使用。这是我玩之后能够理解的片段(至少更好)哈哈。我希望它对某人有用。
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")));