JS继承2

一.原型链继承

关键步骤:

  • 让子类的原型对象成为父类的实例

  • 矫正子类构造器属性

 1 function Animal(name,age){
 2   this.name = name;
 3   this.age = age;
 4 }
 5 
 6 Animal.prototype.eat = function(){
 7   console.log("Animal eat");
 8 }
 9 
10 function Cat(name,age){
11   this.name = name;
12   this.age = age;
13 }
14 
15 //让子类的原型对象成为父类的实例
16 Cat.prototype = new Animal();
17 
18 //当使用原型继承的时候,注意矫正子类的构造器属性
19 Cat.prototype.constructor = Cat;
20 
21 var tom = new Cat('tom',3);
22 tom.eat();

二.借用构造函数继承

借用构造函数继承是伪继承:原型链上找不到父类的实例(son.__proto__..... != father.prototype)

 1     function Animal(name, age) {
 2       this.name = name;
 3       this.age = age;
 4     }
 5     //子类没有继承父类的方法,子类原型链上找不到父类的实例为伪继承
 6     Animal.prototype.eat = function () {
 7       console.log("Animal eat");
 8     }
 9 
10     function Cat(name, age, sex) {
11 
12       //借用构造函数继承方式1
13       Animal.call(this, name, age);
14 
15       //借用构造函数继承方式2
16       // Animal.apply(this, [name, age]);
17 
18 
19       this.sex = sex;
20     }
21 
22 
23     var tom = new Cat('tom', 3, 'boy');

三.组合继承:前两种方式加在一起

 1     function Animal(name, age) {
 2       this.name = name;
 3       this.age = age;
 4     }
 5 
 6     Animal.prototype.eat = function () {
 7       console.log("Animal eat");
 8     }
 9 
10     function Cat(name, age, sex) {
11 
12       //借用构造函数继承方式1
13       // Animal.call(this, name, age);
14 
15       //借用构造函数继承方式2
16       Animal.apply(this, [name, age]);
17 
18 
19       this.sex = sex;
20     }
21 
22     //让子类的原型对象成为父类的实例
23     Cat.prototype = new Animal();
24 
25     //当使用原型继承的时候,注意矫正子类的构造器属性
26     Cat.prototype.constructor = Cat;
27 
28 
29     var tom = new Cat('tom', 3, 'boy');
30 
31     console.log(tom)

 

posted @ 2019-12-08 12:06  All_just_for_fun  阅读(266)  评论(0编辑  收藏  举报