2017-09-22 83 views
1

es6箭头功能是否有polyfill是否有es6箭头函数的polyfill?

以下代码在IE中抛出语法错误异常,是否有一个polyfill使IE支持箭头函数?

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

注意:我不希望使用任何transpiler

在此先感谢

+2

这种功能无法polifilled。 – dfsq

+0

传译者存在的原因是为了解决polyfills不能解决的问题。避免它们的动机是什么? – loganfsmyth

+0

我有一个现有的代码(遍布企业应用程序)正在创建/更改我的许多开发人员。所以我想要无缝地让开发人员使用es6功能。 – Rana

回答

4

箭头函数没有填充。除非使用转译器,否则编写代码时会出现语法错误。

0

填充可以添加或修复类,函数,对象,但它不能修改编译器接受的语法。

+1

类也是新的语法;) –

+0

我不同意,创建新的变量不会增加新的语法 –

+0

'class Foo {}'不能被不支持类的浏览器解析。但现在我重读了这篇文章,我想你的意思是增加内置类的功能(虽然我不确定是否有)。一般而言,我认为只是说polyfills可以添加/修复* API *不那么令人困惑。 –

0

添加新语法的功能不能被多重填充。

我只能想到babel-standalone,你可以把它想象成JIT编译器/转译器(如果这对你有用)。

0

我用JS很绿,所以我有一种感觉,这可能不符合polyfill的要求......但它似乎确实是'胶带'的权宜之计。我发现a fiddleLuis 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")));

相关问题