簡體   English   中英

使用Babel在ES6中擴展內置本機

[英]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-b​​uiltin-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM