用Babel在ES6中扩展内置的本机
我使用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
这是不可能的,因为它不是一个可以模拟的function。 我们将不得不等待浏览器本地支持(有些已经在实验模式中支持它)。 这也意味着它将在不同的浏览器中performance不同。
Babel默认不能处理扩展的内buildtypes。 在Babel 6上,你现在可以通过https://www.npmjs.com/package/babel-plugin-transform-builtin-extend
"plugins": [ ["transform-builtin-extend", { globals: ["Array"] }] ]
请记住,这可能是一个老的IE浏览器老环境的问题,所以你是否应该延长内buildtypes取决于你是否在意这一点。
虽然我不明白为什么你会得到错误(我不能重现它),你不会得到你想从第一个()函数得到什么。
你可以做的是这样的:
class NewArray extends Array { constructor(){ super(); this.first = function(){ return this[0]; } } } var a = new NewArray(); a.push(10); console.log(a.first()); // 10