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

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

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 Report

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 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!