Жесткое кодирование Javascript Constructor Параметр нет-нет?

1

Я играю с Classes & Inheritance в Javascript, но я не понимаю одну часть поведения конструкторов. В моем родительском классе я hard-coded bankAccountStatus на следующее значение: Bank Account is Low. Затем я создал подкласс с именем MemberStatus и определил параметры конструктора как те же самые входы родительского класса. Однако, если я попытаюсь изменить bankAccountStatus когда я вызываю new MemberStatus на что-то еще, это не займет. Я могу, конечно, изменить это на имя параметра, чтобы заставить его работать, но я пытаюсь понять его функциональность. В любом случае, чтобы изменить это значение, не преобразовывая его в родительский класс на this.bankAccountStatus = bankAccountStatus;

class User {
  constructor(firstName, lastName, phone, bankAccountStatus){
    this.firstName = firstName;
    this.lastName = lastName;
    this.phone = phone;
    this.bankAccountStatus = 'Bank Account is Low';
  }
}

class MemberStatus extends User {
  constructor(firstName, lastName, phone, bankAccountStatus, vipStatus){
    super(firstName, lastName, phone, bankAccountStatus);
    this.vipStatus = vipStatus;
  }
}

let john = new MemberStatus('John', 'Doe', '555-123-4567', 'Bank Account is Wealthy', 'Gold');
console.log(john);
Теги:
es6-class

2 ответа

2
Лучший ответ

Зачем добавлять его в конструктор User если вы собираетесь его по умолчанию? Конструкторы расширенных классов не обязательно должны быть одинаковыми:

class User {
  constructor(firstName, lastName, phone){
    this.firstName = firstName;
    this.lastName = lastName;
    this.phone = phone;
    this.bankAccountStatus = 'Bank Account is Low';
  }
}

class MemberStatus extends User {
  constructor(firstName, lastName, phone, bankAccountStatus, vipStatus){
    super(firstName, lastName, phone);
    this.bankAccountStatus = bankAccountStatus
    this.vipStatus = vipStatus;
  }
}

let john = new MemberStatus('John', 'Doe', '555-123-4567', 'Bank Account is Wealthy', 'Gold');
console.log(john);
  • 0
    Теперь это имеет смысл для меня! Я думаю, если вы не собираетесь делать это "изменяемым", нет необходимости делать это параметром. Я ценю ответ и учебный момент :)
1

Ты спрашиваешь:

В любом случае, чтобы изменить это значение, не преобразовывая его в родительский класс на this.bankAccountStatus = bankAccountStatus

Если вы посмотрите на свои конструкторы:

class User {
  constructor(firstName, lastName, phone, bankAccountStatus){
    this.firstName = firstName;
    this.lastName = lastName;
    this.phone = phone;
    this.bankAccountStatus = 'Bank Account is Low';
  }
}

class MemberStatus extends User {
  constructor(firstName, lastName, phone, bankAccountStatus, vipStatus){
    super(firstName, lastName, phone, bankAccountStatus);
    this.vipStatus = vipStatus;
  }
}

Вы передаете строку в качестве 4-го параметра пользовательской переменной, но вы никогда не обращаетесь к ней. Если вы хотите указать значение по умолчанию this.bankAccountStatus, вы можете поместить его в параметры, например:

class User {
  constructor(firstName, lastName, phone, bankAccountStatus = 'Bank Account is Low'){
    this.firstName = firstName;
    this.lastName = lastName;
    this.phone = phone;
    this.bankAccountStatus = bankAccountStatus;
  }
}

Удачи с вашим проектом!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню