Javascript 为什么';超级';在构造函数中返回';未定义';
我创建了一个名为Javascript 为什么';超级';在构造函数中返回';未定义';,javascript,this,javascript-objects,super,Javascript,This,Javascript Objects,Super,我创建了一个名为Person的类,然后创建了另一个名为BMI的类,该类使用Person类中的两个参数,并使用super关键字。当我console.log我用super调用的两个参数时,它们返回undefined。如何使继承的参数返回所需的值 班级人员{ 构造函数(fName,lName){ this.firstName=fName; this.lastName=lName; this.fullName=函数(){ 返回this.firstName+“”+this.lastName; } } }
Person
的类,然后创建了另一个名为BMI
的类,该类使用Person
类中的两个参数,并使用super
关键字。当我console.log
我用super调用的两个参数时,它们返回undefined
。如何使继承的参数返回所需的值
班级人员{
构造函数(fName,lName){
this.firstName=fName;
this.lastName=lName;
this.fullName=函数(){
返回this.firstName+“”+this.lastName;
}
}
}
让马克=新人(“马克”、“史蒂文森”);
console.log(mark.fullName())//返回“mark Stevenson”
类BMI扩展个人{
建造商(fName、lName、体重、身高){
超级(fName,lName);
质量=重量;
该高度=高度/100;
}
calcBMI(){
返回数学圆(this.mass/this.height**2);
}
显示(){
返回`${super.fName}${super.lName}的BMI为${this.calcBMI()}`;
}
}
让约翰=新体重指数('john','johnson',100190)
console.log(john.display())//返回“undefined的BMI为28”
您可以使用this
,因为您扩展了Person类,并且设置了this.firstName=fName
,所以您需要访问this.firstName
而不是this.fName
班级人员{
构造函数(fName,lName){
this.firstName=fName;
this.lastName=lName;
this.fullName=函数(){
返回this.firstName+“”+this.lastName;
}
}
}
让马克=新人(“马克”、“史蒂文森”);
console.log(mark.fullName())//返回“mark Stevenson”
类BMI扩展个人{
建造商(fName、lName、体重、身高){
超级(fName,lName);
质量=重量;
该高度=高度/100;
}
calcBMI(){
返回数学圆(this.mass/this.height**2);
}
显示(){
返回`${this.firstName}${this.lastName}的BMI为${this.calcBMI()}`;
}
}
让约翰=新体重指数('john','johnson',100190)
console.log(john.display())//返回“undefined的BMI为28”
不访问super.fName
,访问this.firstName
!在Person
类中,您在哪里定义了fName
?根据构造器,属性名为firstName
和lastName
5分钟到晚:-)。。。正确的答案已经在这里了。这是父类中方法的正确名称。我认为这是一个很常见的错误。