Uncaught ReferenceError: calcAge is not defined

Viewed 62

I have created a simple object below,

let user = {
  birthYear: 1991,
  calcAge: function () {
     return 2021 - this.birthYear; 
},
 currentAge: calcAge(), //`-------------------- x`
};

console.log(user.calcAge());

getting an error at x with reference error. What can be the error?

3 Answers

The function is defined inside the user object. Therefore you call it via user.calcAge() like so:

let user = {
  birthYear: 1991,
  calcAge: function() {
    return 2021 - this.birthYear;
  },
  currentAge: function() {
    return user.calcAge();
  },
};

console.log(user.currentAge());

Couple different ways to get this working.

Could simplify and turn calcAge into a function inherently:

let user = {
  birthYear: 1991,
  calcAge () {
    return 2021 - this.birthYear;
  },
};

console.log(user.calcAge());

Maybe breaking out your variables to being more explicit:

let user = {
  birthYear: 1991,
  currentYear: 2021,
  
  calcAge () {
    return this.currentYear - this.birthYear;
  },
};

console.log(user.calcAge());

Could consider using an Object getter. This treats it as a property of an object as opposed to an invoked method.

let user = {
  birthYear: 1991,
  currentYear: 2021,

  get currentAge() {
    return this.currentYear - this.birthYear;
  },
};

console.log(user.currentAge);

here is another way you can go about it.

let user = {
  birthYear: 1991,
  calcAge: function() {
    this.currentAge = 2021 - this.birthYear;
  }
}
user.calcAge()
console.log(user.currentAge);

Related