Ссылка на значение свойства из другого свойства в конструкторе класса - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь сослаться на значение, возвращенное в предыдущем методе, в свойстве другого метода в другом свойстве
внутри конструктора, но я получаю сообщение "TypeError: Невозможно прочитать свойство 'name' of undefined"

class Loans {
  constructor(user, loanAmount, tenor, id = 0, status = 'pending', repaid = 'false') {
    this.id = id + 1;
    this.user = user;
    this.loanAmount = loanAmount;
    this.tenor = tenor;
    this.status = status;
    this.repaid = repaid;
    this.interest = (function interest() {
      return (loanAmount * 0.05);
    }());
    this.monthlyInstall = (function monthlyInstall() {
      return (loanAmount + this.interest) / tenor;
    }());
    this.balance = (function balance() {
      return (loanAmount + interest);
    }());
    this.createdAt = new Date().toLocaleString();
  };

};
const loan = new Loans('steve.jobs', 50000, 5);
console.log(loan);
but I got an error ->

      return (loanAmount + this.interest) / tenor;
                                ^

TypeError: Cannot read property 'interest' of undefined
    at monthlyInstall (C:\Users\DEBAYO\Desktop\JavaScript\Challenges\testing.js:183:33)
    at new Loans (C:\Users\DEBAYO\Desktop\JavaScript\Challenges\testing.js:184:6)

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Если вы хотите, чтобы эта сумма была динамической (вы обновляете значение, которое они обновляют соответственно), они должны быть функциями. Я сделал их определенные функции ниже. Это означает, что если вы измените одну из вычисляемых переменных, они будут обновлены автоматически.

class Loans {
  constructor(user, loanAmount, tenor, id = 0, status = 'pending', repaid = 'false') {
    this.id = id + 1;
    this.user = user;
    this.loanAmount = loanAmount;
    this.tenor = tenor;
    this.status = status;
    this.repaid = repaid;
    this.createdAt = new Date().toLocaleString();
  };
  
  interest = () => (this.loanAmount * 0.05);
  monthlyInstall = () => (this.loanAmount + this.interest()) / this.tenor;
  balance = () => (this.loanAmount + this.interest());
};
const loan = new Loans('steve.jobs', 50000, 5);
console.log(loan);
console.log(loan.interest());
console.log(loan.monthlyInstall());
console.log(loan.balance());
loan.tenor = 6;
console.log(loan);
console.log(loan.interest());
console.log(loan.monthlyInstall());
console.log(loan.balance());
0 голосов
/ 02 мая 2019

вместо

this.monthlyInstall = (function monthlyInstall() {
      return (loanAmount + this.interest) / tenor;
    }());

просто сделай

 this.monthlyInstall = (loanAmount + this.interest) / tenor;

Или вам нужно передать ссылку "this" в ваш метод monthInstall (), потому что в противном случае он не знает, что такое "this".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...