ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

创建人类,教师类,学生类,分别通过三种不同的继承方式(原型继承,冒充继承,混合继承),总结优点缺点

2021-07-30 21:31:19  阅读:205  来源: 互联网

标签:name course 继承 冒充 原型 new professional


//首先创建一个教师类 

function Teacher(name,age,course,professional){
	this.name=name;
	this.age=age;
	this.course=course;//课程
	this.professional=professional;//职业
}
Teacher.prototype.teaching=function(){//上课
		console.log(this.name + this.professional +"正在上"+ this.course +"课");
}
var t1=new Teacher("张三",18,"语文","老师");
t1.teaching();//运行结果:张三老师正在上语文课

//在创建一个人类

function Human(name,age,course,professional){

}

//现在让人类继承教师类(原型链继承)

Human.prototype= new Teacher("赵六",24,"数学","老师");
Human.prototype.showInfo=function(){//信息
	console.log(this.course+this.professional+this.name+"年龄"+this.age+"岁");
}
var h1=new Human();//没有传参
h1.showInfo();//运行结果:数学老师赵六年龄24岁
h1.teaching();//运行结果:赵六老师正在上数学课

//现在试试传参

var h2=new Human("孙七",42,"化学","老师");
h2.showInfo();//运行结果:数学老师赵六年龄24岁  

//传参后并没有用,是因为在原型中对父级属性统一赋值了,这是原型链继承的缺点 

 //最后在创建一个学生类(混合继承(原型链继承和冒充继承))

function Student(name,age,course,professional){
	//现在试一下学生类继承教师类(冒充继承)
	Teacher.call(this,name,age,course,professional);
}
Student.prototype.learning=function(){//学习
	console.log(this.professional + this.name + "正在学习" + this.course);
}
Student.prototype.play=function(){//玩
	console.log(this.professional + this.name + "正在玩");
}
var s1=new Student("李四",8,"美术","学生");
s1.learning();//运行结果:学生李四正在学习美术
s1.play();//运行结果:学生李四正在玩

 //现在测试一下学生有没有继承教师的上课teaching方法
 

//s1.teaching();报错了,说明没有继承到方法,这就是冒充继承的缺点,继承不到原型上的方法

//总结,原型继承既能继承到属性,也能继承到原型上的方法,但是继承的属性的值都是继承时确               定的,无法进行传参修改
//           冒充继承可以传参修改属性,但是无法继承父级原型上的方法

//所以现在要使用混合继承,构造函数内部采用冒充继承,构造函数外部采用原型继承(不传参,只继承原型上的方法) 

//学生类继承教师类的方法(原型继承)

Student.prototype=new Teacher();

//再次测试学生类有没有继承教师的上课teaching方法

var s2=new Student("周八",9,"英语","学生");
s2.teaching();//运行结果:周八学生正在上英语课

//再试一下学生类继承人类的方法(原型继承)

Student.prototype=new Human();
var s3=new Student("吴九",10,"物理","学生");
s3.showInfo();//运行结果:物理学生吴九年龄10岁

 

 

标签:name,course,继承,冒充,原型,new,professional
来源: https://blog.csdn.net/weixin_44159525/article/details/119255755

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有