Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

281
Visualizações
¿Cuál es el orden de ejecución del constructor super() y los métodos de subclase en la programación orientada a objetos de JavaScript?

¿Por qué this no está definido en el método render() dentro de la subclase? ¿Por qué this interior del constructor de la clase base se refiere al objeto creado basado en la subclase? Quiero saber el orden de ejecución aquí.

 class baseClass { constructor() { this.render(); // why does "this" (not this.render()) refer to the created object based on derivedClass? } render() { console.log("won't get executed."); } } class derivedClass extends baseClass { foo = "foo" constructor() { super(); console.log(this); } render() { console.log(this.foo); // why is "this" undefined? alert("rendered"); } } new derivedClass;

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Para comprender mejor cómo funciona, puede cambiar un poco su código:

 class baseClass { bar = 'bar'; constructor() { console.log( `In baseClass constructor this is ${JSON.stringify(this, null, 2)}` ); this.render(); // why does "this" (not this.render()) refer to the created object based on derivedClass? } render() { console.group(); console.log(this); console.log('baseClass rendered'); console.groupEnd(); } } class derivedClass extends baseClass { foo = 'foo'; constructor() { super(); console.log( `In derivedClass constructor this is ${JSON.stringify(this, null, 2)}` ); this.render(); } render() { console.group(); console.log(this); console.log('derivedClass rendered'); console.groupEnd(); } } new derivedClass();

Saldrá:

 In baseClass constructor this is { "bar": "bar" } derivedClass { bar: 'bar' } derivedClass rendered In derivedClass constructor this is { "bar": "bar", "foo": "foo" } derivedClass { bar: 'bar', foo: 'foo' } derivedClass rendered

Entonces la secuencia es la siguiente:

  1. derivedClass constructor de la clase derivada se llama cuando hace una new derivedClass();
  2. Llama al constructor baseClass
  3. Los miembros de datos se rellenan con lo que baseClass "posee"
  4. Sin embargo, los métodos son de derivedClass , es por eso que ve "clase derivada representada" cuando se llama a representación desde el constructor de baseClass .
  5. Los miembros de datos de derivedClass se agregan
  6. derivedClass constructor de la clase derivada llama a render de nuevo.

Es un poco contrario a la intuición, especialmente si vienes de la programación orientada a objetos con C ++, Java, etc. Y creo que esta es la razón por la que algunos intentan evitar las clases y this en JavaScript por completo.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda