老师看代码 经典继承不写 Student.prototype = new People()的话就不能用父类的方法,只能用属性,经典继承本身就是这样的吗
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 借用构造函数(在子类构造函数的内部调用超类构造函数,注意用call()指定上下文),实现伪造对象/经典继承
// 利用原型链实现继承 子类拥有符类的所有属性和方法
function People(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
People.prototype.sayHello = function () {
console.log('你好我是' + this.name + '我的年龄是' + this.age + '我是' + this.sex + '生');
};
People.prototype.sleep = function () {
console.log(this.name + 'zzzz');
};
// 子类也要被定义
function Student(name, age, sex, school, studentNumber) {
People.call(this,name, age, sex)
// this.name = name;
// this.age = age; 程序更简洁
// this.sex = sex;
this.school = school;
this.studentNumber = studentNumber;
}
// ***实现继承的关键语句!!!!
Student.prototype = new People(); // 经典继承要不要写这一句话?不写的话People里面的方法Student就不能用 下面被注释掉的语句会出错
// Student的实例
var xiaogang = new Student('小刚', 12, '男', '艾利斯顿商学院', 10086);
console.log(xiaogang.name);
console.log(xiaogang.school);
// xiaogang.sayHello(); 这里不注释掉的话程序出错
// xiaogang.exam();
// Peopel实例
var laozhao = new People('张继你', 55, '男');
laozhao.sayHello();
</script>
</body>
</html>
源自:面向对象
8-4 借用构造函数
13
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕慕子
2022-05-11 09:48:49
同学你好,对于你的问题解答如下:
1、理解有误差,并不是不能用父类的方法,而是,经典继承只能继承父类实例上的属性和方法,并不能继承父类prototype上的属性和方法
2、经典继承指的就是借用构造函数实现的继承,不用写Student.prototype = new People(); 这句代码,如果添加上Student.prototype = new People(); 那么就是下节课老师要讲解的组合式继承。
3、跟着课程安排继续往后学习,会发现老师讲解了多种继承方式,每种继承方法都有自己的优缺点,开发中结合实际需求,灵活应用某一种方式实现效果即可。
祝学习愉快~

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星