Javascript console.log não mostra o nome da classe derivada - herança - classes

9

Eu estou jogando com as classes do ECMAScript6.

Ainda não entendi porque o código a seguir:

"use strict";

class A {}
class B extends A {}

let b = new B();
console.log(b);

Exibe:

A {}

Em vez de:

B {}

Exemplo ao vivo:

(function () {
    "use strict";

    class A {}
    class B extends A {
        foo() {
        }
    }

    let b = new B();
    console.log(b);
})();
Open the console. Works only on very up-to-date browsers (such as Chrome 43+).

Como posso ter a saída lógica esperada B {} no console.log?

Posso especificar meu nome de classe como " B "? Existe essa opção para passar, ou um atributo ou uma função para definir?

T.J. Crowder entendeu: é um bug referenciado no Chrome.

Todo mundo, você pode estrelar este bug para aumentar sua prioridade?

link

    
por Denis Truffaut 03.08.2015 в 12:01
fonte

1 resposta

2

Você ainda não disse qual navegador está usando, mas acho que ele precisa ser o Chrome, dado o estilo da saída que você mostrou e que ele é executado. (Se eu executar isso no IE11, eu recebo [object Object] {} . Se eu executá-lo no Firefox, eu recebo um erro - porque o Firefox não suporta class ainda .

Não consigo pensar em outro motivo que não seja um bug no Chrome. O suporte para class é muito novo no Chrome, pode ser que os devtools não estejam lidando com isso corretamente ainda. Não encontrei um relatório de erros no link em uma pesquisa rápida, talvez você queira arquivar um. Mas você encontrou .

Ele deve estar mostrando B com seu código, não A . faz com a maneira antiga e equivalente de fazê-lo:

(function() {
  "use strict";

  function A() {}

  function B() {
    A.call(this);
  }
  B.prototype = Object.create(A.prototype);
  B.prototype.constructor = B;

  var b = new B();
  console.log(b);
})();
Open the console.
    
por T.J. Crowder 03.08.2015 / 12:11
fonte