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



我正在玩Javascript中的Classes&Inheritance,但我不理解构造函数行为的一部分。在我的父类中,我hard-codedbankAccountStatus以下值Bank Account is Low。然后,我创建了一个名为 MemberStatus 的子类,并将构造函数参数定义为父类的相同输入。但是,如果我在打电话给new MemberStatus时尝试更改bankAccountStatus,则不需要。我当然可以将其更改为参数名称以使其正常工作,但我正在尝试了解它的功能。无论如何可以更改该值而不将其在父类中转换为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);

你问:

无论如何可以更改该值而不将其在父类中转换为 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;
}
}

祝你的项目好运!

最新更新