是否有es6箭头功能的polyfill?

时间:2017-09-22 11:50:20

标签: javascript jquery node.js ecmascript-6 ecmascript-5

es6箭头功能是否有polyfill

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

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

注意:我不想使用任何transpiler

提前致谢

4 个答案:

答案 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")));