是否有一个用于 ES6 箭头函数的 polyfill
?
在 IE 中,以下代码会抛出语法错误异常,是否有一个 polyfill
可以使 IE 支持箭头函数?
var myFunc = ()=>{
alert('es6');
}
myFunc();
注意: 我不想使用任何 转译器
。
先行致谢。
是否有一个用于 ES6 箭头函数的 polyfill
?
在 IE 中,以下代码会抛出语法错误异常,是否有一个 polyfill
可以使 IE 支持箭头函数?
var myFunc = ()=>{
alert('es6');
}
myFunc();
注意: 我不想使用任何 转译器
。
先行致谢。
一个 polyfill 可以添加或修复缺失的内置类、函数、对象...但它不能修改编译器接受的语法。
class Foo {}
。但是现在我重新阅读了这篇文章,我猜你是指添加内置类的功能(虽然我不确定是否有任何内置类)?总的来说,我认为简单地说填充可以添加/修复API会更少令人困惑。 - Felix Kling箭头函数没有 polyfill。如果您不使用转换器,那么编写此代码就是语法错误。
我对JS还不是很熟悉,所以我觉得这可能不能算作是一个polyfill...但它似乎是个'管道胶带'的权宜之计。我发现由Luis Perez制作的 fiddle提供了这个功能。我仍在努力更好地理解箭头函数,但它至少可以与MDN箭头函数示例之一一起工作。这是我在玩弄之后设法理解的片段(至少更好了),希望它对某人有用。
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")));