使用Babel在ES6中扩展内置本机

Jos*_*gel 17 javascript ecmascript-6 babeljs

我正在使用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
Run Code Online (Sandbox Code Playgroud)

在a.first()中,我收到此错误:

console.log(a.first());
              ^ 

TypeError: a.first is not a function
Run Code Online (Sandbox Code Playgroud)

我应该做些什么来扩展内置本机?

谢谢!

Sul*_*han 16

Babel不支持扩展本机类.它已在5.2.17版本中删除(请参阅此提交)

它已被删除,因为它无法正常工作,请参阅错误:https : //phabricator.babeljs.io/T1424

它不太可能被添加,因为它不是可以模拟的功能.我们将不得不等待浏览器中的本机支持(一些已经在实验模式中支持它).这也意味着它目前在不同的浏览器中表现不同.


log*_*yth 12

默认情况下,Babel无法处理扩展的内置类型.在巴贝尔6,你现在可以做到这一点https://www.npmjs.com/package/babel-plugin-transform-b​​uiltin-extend

"plugins": [
    ["transform-builtin-extend", {
        globals: ["Array"]
    }]
]
Run Code Online (Sandbox Code Playgroud)

请记住,这可能是旧版IE等旧版环境中的一个问题,因此您是否应该扩展内置类型取决于您是否关心它.