这段代码无法打印出第二个子类传递的 'name''sex' 参数内容,是因为在子类的构造函数中没有调用父类的构造函数来传递这些参数,而是通过将子类的原型指向父类的实例来继承父类的属性和方法。

所以在子类实例化时,虽然能够访问到父类的 'name''sex' 属性,但是这些属性的值是在父类构造函数中赋值的,而不是在子类构造函数中传递的。

解决方法:

在子类构造函数中调用父类的构造函数,并传递参数:

function person(name, sex) {
    this.name = name;
    this.sex = sex;
}

person.prototype.eat = function() {};

function student(step, name, sex) {
    person.call(this, name, sex); // 调用父类构造函数
    this.step = step;
}

student.prototype = new person(); // 继承父类原型
student.prototype.constructor = student; // 修正 constructor 属性

let d1 = new student('种菜', '李饼', '男');
console.log(d1.name, d1.sex, d1.step);

function jimes(lanuage, name, sex) {
    person.call(this, name, sex); // 调用父类构造函数
    this.lanuage = lanuage;
}

jimes.prototype = new person(); // 继承父类原型
jimes.prototype.constructor = jimes; // 修正 constructor 属性

let d2 = new jimes('C#', '王七', '女');
console.log(d2);

通过在子类构造函数中使用 person.call(this, name, sex),将参数传递给父类的构造函数,就可以正确地将父类构造函数中的参数传递给子类实例。


原文地址: https://www.cveoy.top/t/topic/mjy3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录