硬编码 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;
}
}
祝你项目顺利!
我正在研究 类 和 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;
}
}
祝你项目顺利!