2017-09-22 10 views
1

es6 arrow機能用にpolyfillはありますか?es6の矢印機能のポリフィルはありますか?

IEで次のコードが構文エラー例外をスローすると、polyfillがIEサポートの矢印機能を作成していますか?

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

:私はどんなtranspilerを使用する必要はありません。

ありがとうございます。

+2

機能のこの種のpolifilledすることはできません。 – dfsq

+0

ポリプロピレンでは不可能な問題を解決するために、蒸散器が存在する理由があります。それらを避けるための動機は何ですか? – loganfsmyth

+0

多くの開発者が作成/変更されている既存のコード(エンタープライズアプリケーション全体に広がっています)があります。だから私は開発者がes6の機能を使用できるようにシームレスにしたい。 – Rana

答えて

4

矢印機能のためのポリフィルはありません。あなたがトランスバータを使用しない限り、コードを記述するのは構文エラーです。

0

polyfillは、クラス、関数、オブジェクトを追加または修正できますが、コンパイラが受け入れている構文を変更することはできません。

+1

クラスも新しい構文です;) –

+0

新しい変数を作成すると新しい構文が追加されない –

+0

'Foo {}'クラスは、クラスをサポートしていないブラウザでは解析できません。しかし、今私はあなたが組み込みクラスの機能を追加することを意味すると思う投稿を読んでいる(私は確信していませんがあるかどうか)?一般的に私は単にpolyfillsがAPIを追加/修正できると言っていると思います*はあまり混乱しません。 –

0

新しい構文を追加する機能は、ポリフェリングすることはできません。

私はbabel-standaloneしか考えることができませんが、これはJITコンパイラ/トランスペラレータと考えることができます(これは問題ありません)。

0

私はJSとかなり緑ですので、これはpolyfillとしての資格がないかもしれないと感じています...しかし、それは 'ダクトテープ'のストップギャップのようです。この機能を実現するLuis Perezによって作成されたa fiddleが見つかりました。私はまだ矢印の機能を理解するために努力していますが、少なくとも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")));

関連する問題