Is there a polyfill for es6 arrow function?

前端 未结 4 1732
隐瞒了意图╮
隐瞒了意图╮ 2020-12-16 11:09

Is there a polyfill for es6 arrow function?

the following code throws syntax error exception in IE, is there a polyfill to make IE support

相关标签:
4条回答
  • 2020-12-16 11:24

    Features that add new syntax can not be polyfilled.

    I can only think of babel-standalone, which you can think of as a JIT compiler/transpiler (if that is OK with you).

    0 讨论(0)
  • 2020-12-16 11:26

    A polyfill can add or fix missing built-in classes, functions, objects... but it cannot modify a compiler's accepted syntax.

    0 讨论(0)
  • 2020-12-16 11:28

    There is no polyfill for arrow functions. It is a syntax error to write the code you have unless you use a transpiler.

    0 讨论(0)
  • 2020-12-16 11:47

    I'm pretty green with JS so I have a feeling that this may not qualify as a polyfill... but it does seem to be a 'duct tape' stopgap though. I found a fiddle made by Luis Perez that gives this functionality. I'm still working to better understand arrow functions but it at least does work with one of the MDN arrow function examples. Here's the snippet that after playing with I managed to understand (better at least) lol. I hope it is useful to someone.

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

    0 讨论(0)
提交回复
热议问题