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