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

时间:2015-11-20 17:27:55

标签: 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

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

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

TypeError: a.first is not a function

我应该做些什么来扩展内置本地语吗?

谢谢!

3 个答案:

答案 0 :(得分:16)

Babel不支持扩展本机类。 它已在5.2.17版本中删除(请参阅this commit

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

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

答案 1 :(得分:12)

默认情况下,Babel无法处理扩展的内置类型。在Babel 6上,您现在可以通过

使用https://www.npmjs.com/package/babel-plugin-transform-builtin-extend执行此操作
"plugins": [
    ["transform-builtin-extend", {
        globals: ["Array"]
    }]
]

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

答案 2 :(得分:0)

虽然我不明白为什么你会得到错误(我无法重现它),但你不会得到你想从第一个()函数得到的东西。

你可以做的是:

   class NewArray extends Array {
      constructor(){
        super();
        this.first = function(){ return this[0]; }
      }
    }

    var a = new NewArray();
    a.push(10);
    console.log(a.first()); // 10