“人”类 , “小学生”类。 小学生也是人,只不过“丰富了”人。
“人”类有的属性,“小学生”都有,比如姓名、年龄、性别。
“人”类有的方法,“小学生”都有,比如打招呼、吃饭、睡觉。
除此之外,
“小学生”还丰富了一些属性:学号、班级、小红花个数、是否少先队员
“小学生”还丰富了一些方法:学习、lol、上课
小学生类,继承了人类。一说继承,千万不要想到人生的遗产继承,感觉小学生比人类少,是人类的局部。千万不要这么想。在计算机世界中,继承是“丰富”,是比原来的类要多东西。
小学生继承于人类, 小学生更丰富。
说白了,People、Student两个类,Student类的实例,拥有 People的全部属性属性、方法。
现在,你就应该朦朦胧胧的感觉到,用原型链来实现。JavaScript中没有extends。
People叫做父类、超类; Student叫做子类。
JS中实现继承的口号:
子类的prototype等于父亲的某个实例
![](https://img-blog.csdn.net/20180802092054440?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM2NDE0NTE1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
来看一个具体案例:
- function People(name,age,sex){
- this.name = name;
- this.age = age;
- this.sex = sex;
- }
- People.prototype.sayHello = function(){
- alert("你好我是人" + this.name);
- }
- People.prototype.chifan = function(){
- alert("我吃饭了!mia mia");
- }
-
-
- function Student(name,age,sex,xuehao,xiaohonghuageshu){
- this.name = name;
- this.age = age;
- this.sex = sex;
- this.xuehao = xuehao;
- this.xiaohonghuageshu = xiaohonghuageshu;
- }
- //核心语句,继承的实现全靠这条语句了:
- Student.prototype = new People();
-
- Student.prototype.sayHello = function(){
- alert("你好我是小学生,我的学号是" + this.xuehao);
- }
- Student.prototype.study = function(){
- alert("好好学习,天天向上");
- }
- Student.prototype.lol = function(){
- alert("玩儿英雄联盟啊!");
- }
-
- var xiaohong = new Student("小红",11,"女",20160001,4);
- //xiaohong.lol();
- //xiaohong.chifan();
- xiaohong.sayHello();
|
![](https://img-blog.csdn.net/20180802092118136?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM2NDE0NTE1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
子类可以覆盖父类的一些方法,父类的方法不冲突,因为我们子类追加的方法,追加到了父类的实例上。
这种方法不行:追加子类方法的时候,父类也被改了:
![](https://img-blog.csdn.net/20180802092129615?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM2NDE0NTE1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)