硬编码 Javascript 构造函数参数禁忌?

Hardcoding Javascript Constructor Parameter a no-no?

我正在研究 类 和 Javascript 中的继承,但我不理解构造函数行为的一部分。在我的父class,我hard-coded bankAccountStatus下面的值Bank Account is Low。然后我创建了一个名为 MemberStatus 的子 class,并将构造函数参数定义为与父 class 相同的输入。但是,如果我在调用 new MemberStatus 时尝试将 bankAccountStatus 更改为其他内容,则不会。我当然可以将其更改为参数名称以使其正常工作,但我正在尝试了解它的功能。无论如何要更改该值而不将其在父 class 中转换为 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);

如果您要默认它,为什么还要将它添加到 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);

你问:

Is there anyway to change that value without converting it in the parent class to 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;
  }
}

祝你项目顺利!