[英]Extending Built-in Array With ES6 Classes - Method is not a function error
[英]Extending built-in natives in ES6 with Babel
我正在使用Babel擴展我的類與內置的本機數組
class NewArray extends Array {
first() {
return this[0];
}
}
var a = new NewArray(1, 2, 3);
console.log(a.length); // 3
console.log(a); // [ 1, 2, 3 ]
console.log(a.first()); // trigger error
在a.first()中,我收到此錯誤:
console.log(a.first());
^
TypeError: a.first is not a function
我應該做些什么來擴展內置本機?
謝謝!
Babel不支持擴展本機類。 它已在5.2.17版本中刪除(請參閱此提交 )
它已被刪除,因為它無法正常工作,請參閱錯誤: https : //phabricator.babeljs.io/T1424
它不太可能被添加,因為它不是可以模擬的功能。 我們將不得不等待瀏覽器中的本機支持(一些已經在實驗模式中支持它)。 這也意味着它目前在不同的瀏覽器中表現不同。
默認情況下,Babel無法處理擴展的內置類型。 在Babel 6上,你現在可以通過https://www.npmjs.com/package/babel-plugin-transform-builtin-extend做到這一點
"plugins": [
["transform-builtin-extend", {
globals: ["Array"]
}]
]
請記住,這可能是舊版IE等舊版環境中的一個問題,因此您是否應該擴展內置類型取決於您是否關心它。
雖然我不明白為什么你會得到錯誤(我無法重現它),但你不會得到你想從第一個()函數得到的東西。
你能做的是:
class NewArray extends Array {
constructor(){
super();
this.first = function(){ return this[0]; }
}
}
var a = new NewArray();
a.push(10);
console.log(a.first()); // 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.