es6箭头功能是否有polyfill
?是否有es6箭头函数的polyfill?
以下代码在IE中抛出语法错误异常,是否有一个polyfill
使IE支持箭头函数?
var myFunc =()=>{
alert('es6');
}
myFunc();
注意:我不希望使用任何transpiler
。
在此先感谢
es6箭头功能是否有polyfill
?是否有es6箭头函数的polyfill?
以下代码在IE中抛出语法错误异常,是否有一个polyfill
使IE支持箭头函数?
var myFunc =()=>{
alert('es6');
}
myFunc();
注意:我不希望使用任何transpiler
。
在此先感谢
箭头函数没有填充。除非使用转译器,否则编写代码时会出现语法错误。
填充可以添加或修复类,函数,对象,但它不能修改编译器接受的语法。
类也是新的语法;) –
我不同意,创建新的变量不会增加新的语法 –
'class Foo {}'不能被不支持类的浏览器解析。但现在我重读了这篇文章,我想你的意思是增加内置类的功能(虽然我不确定是否有)。一般而言,我认为只是说polyfills可以添加/修复* API *不那么令人困惑。 –
添加新语法的功能不能被多重填充。
我只能想到babel-standalone,你可以把它想象成JIT编译器/转译器(如果这对你有用)。
我用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")));
这种功能无法polifilled。 – dfsq
传译者存在的原因是为了解决polyfills不能解决的问题。避免它们的动机是什么? – loganfsmyth
我有一个现有的代码(遍布企业应用程序)正在创建/更改我的许多开发人员。所以我想要无缝地让开发人员使用es6功能。 – Rana