Estendendo nativos integrados no ES6 com o Babel

Estou usando o Babel para estender minha class com a matriz nativa integrada

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 

Em a.first (), estou recebendo este erro:

 console.log(a.first()); ^ TypeError: a.first is not a function 

Devo fazer algo mais para estender um nativo interno?

Obrigado!

A extensão de classs nativas não é suportada pelo Babel. Foi removido na versão 5.2.17 (veja este commit )

Foi removido porque não estava funcionando corretamente, veja o bug: https://phabricator.babeljs.io/T1424

É improvável que seja adicionado porque não é um recurso que pode ser simulado. Teremos que esperar por suporte nativo em navegadores (alguns já suportam agora em modo experimental). Isso também significa que atualmente se comportará de maneira diferente em diferentes navegadores.

O Babel, por padrão, não pode manipular a extensão de tipos internos. No Babel 6, agora você pode fazer isso com https://www.npmjs.com/package/babel-plugin-transform-builtin-extend fazendo

 "plugins": [ ["transform-builtin-extend", { globals: ["Array"] }] ] 

Tenha em mente que isso pode ser um problema em ambientes mais antigos, como o IE antigo, então, se você deve estender os tipos internos, depende um pouco se você se importa ou não com isso.

Embora eu não veja porque você obtém o erro (não consigo reproduzi-lo), você não obterá o que pretendia obter da function first ().

O que você pode fazer é isto:

  class NewArray extends Array { constructor(){ super(); this.first = function(){ return this[0]; } } } var a = new NewArray(); a.push(10); console.log(a.first()); // 10