Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

244
Vistas
JS class attributes return undefined with constructor/set get methods

This JavaScript class doesn't set the attributes using the constructor. For some reason, they come out as undefined. I'm really confused, because if I take out the set/get methods it works, but with the set/get methods , name/genus return undefined.

class Animal {
  constructor(genus, name){
    this.name = name;
    this.genus = genus;
  }
  
  // called when setting this.name (i.e. this.name = value)
  set name(name){
    console.log("you set name");
  }
  
  // Called when getting this.name
  get name(){
    console.log("you got name");
  }
  
    // Called when setting this.name (i.e. this.genus = value)
  set genus(genus){
    console.log("you set genus");
  }
  
  // called when getting this.genus
  get genus(){
    console.log("you got genus");
  }
  
  makeNoise(noise = ""){
    console.log(noise);
  }
  
  // Class method
  static _repr(){
    return "Animal Class";
  }
}
> let cat = new Animal("Feline", "Daisy");
you set name
you set genus
undefined
> cat
Animal {}
> cat.name
you got name
undefined
> cat.genus
you got genus
undefined
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

When you do this.name = name in the constructor, you're invoking the setter. If you want to save the value passed in the constructor arguments, and also save the value when the properties are assigned to outside (eg animal.name = 'foo'), you'll need to

  • Use a different property name to internally store the data - something other than name, which is the same property name as the getter/setter
  • Fix the getters and setters to get and set that internal property

class Animal {
  constructor(genus, name) {
    this._name = name;
    this._genus = genus;
  }
  set name(name) {
    console.log('setter invoked');
    this._name = name;
  }
  get name() {
    console.log('getter invoked');
    return this._name;
  }
  set genus(genus) {
    this._genus = genus;
  }
  get genus() {
    return this._genus;
  }
}

const a = new Animal('gen1', 'name1');
console.log(a.name);
a.name = 'name2';
console.log(a.name);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Your get methods need to actually return the values. You're receiving undefined because all the getters are doing is console logging.

For instance:

get genus(){
    console.log("you got genus");
    return this.genus;
}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda