Ошибка неперехваченной ссылки: вычисление не определено

#javascript #object

Вопрос:

Я создал простой объект ниже,

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

console.log(user.calcAge()); 

получение ошибки x при ошибке ссылки. В чем может быть ошибка?

Ответ №1:

Функция определяется внутри user объекта. Поэтому вы называете это через user.calcAge() так:

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

console.log(user.currentAge()); 

Ответ №2:

Пара разных способов заставить это работать.

Может упростить и превратить calcAge в функцию по своей сути:

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

console.log(user.calcAge());
 

Может быть, разбить ваши переменные на более явные:

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

console.log(user.calcAge());
 

Можно было бы рассмотреть возможность использования метода получения объектов. Это рассматривает его как свойство объекта, а не как вызываемый метод.

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

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

console.log(user.currentAge);
 

Ответ №3:

вот еще один способ, которым вы можете это сделать.

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