Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

274
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!