我正在玩Javascript中的Classes&Inheritance,但我不理解构造函数行为的一部分。在我的父类中,我hard-coded
bankAccountStatus
以下值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;
}
}
祝你的项目好运!