我正在使用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
我应该做些什么来扩展内置本地语吗?
谢谢!
答案 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