12、继承

“人”类 , “小学生”类。 小学生也是人,只不过“丰富了”人。

“人”类有的属性,“小学生”都有,比如姓名、年龄、性别。

“人”类有的方法,“小学生”都有,比如打招呼、吃饭、睡觉。

除此之外,

“小学生”还丰富了一些属性:学号、班级、小红花个数、是否少先队员

“小学生”还丰富了一些方法:学习、lol、上课

小学生类,继承了人类。一说继承,千万不要想到人生的遗产继承,感觉小学生比人类少,是人类的局部。千万不要这么想。在计算机世界中,继承是“丰富”,是比原来的类要多东西

小学生继承于人类, 小学生更丰富。

说白了,People、Student两个类,Student类的实例,拥有 People的全部属性属性、方法。

现在,你就应该朦朦胧胧的感觉到,用原型链来实现。JavaScript中没有extends。

People叫做父类、超类; Student叫做子类。

JS中实现继承的口号:

子类的prototype等于父亲的某个实例

 

来看一个具体案例:

  1.         function People(name,age,sex){
  2.            this.name = name;
  3.            this.age = age;
  4.            this.sex = sex;
  5.        }
  6.        People.prototype.sayHello = function(){
  7.            alert("你好我是人" + this.name);
  8.        }
  9.        People.prototype.chifan = function(){
  10.            alert("我吃饭了!mia mia");
  11.        }
  12.  
  13.  
  14.        function Student(name,age,sex,xuehao,xiaohonghuageshu){
  15.            this.name = name;
  16.            this.age = age;
  17.            this.sex = sex;
  18.            this.xuehao = xuehao;
  19.            this.xiaohonghuageshu = xiaohonghuageshu;
  20.        }
  21.        //核心语句,继承的实现全靠这条语句了:
  22.        Student.prototype = new People();
  23.       
  24.        Student.prototype.sayHello = function(){
  25.            alert("你好我是小学生,我的学号是" + this.xuehao);
  26.        }
  27.        Student.prototype.study = function(){
  28.            alert("好好学习,天天向上");
  29.        }
  30.        Student.prototype.lol = function(){
  31.            alert("玩儿英雄联盟啊!");
  32.        }
  33.  
  34.        var xiaohong = new Student("小红",11,"女",20160001,4);
  35.        //xiaohong.lol();
  36.        //xiaohong.chifan();
  37.        xiaohong.sayHello();

 子类可以覆盖父类的一些方法,父类的方法不冲突,因为我们子类追加的方法,追加到了父类的实例上。

这种方法不行:追加子类方法的时候,父类也被改了:

 

猜你喜欢

转载自blog.csdn.net/sinat_36414515/article/details/81352388