js原型继承和原型链继承复习

176 阅读2分钟

「这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

js继承:

js继承是一种允许我们在已有类的基础上创建新类的机制;它为子类提供了灵活性,可以重用父类的方法和变量

原型:

在JavaScript中,原型是一个对象,通过原型可以实现对象的属性继承,JavaScript的对象中都包含了一个Prototype内部属性,这个属性所对应的就是该对象的原型,简单说就是对象的默认属性和方法

原型链:

在JavaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接。这个原型对象又有自己的原型,直到某个对象的原型为 null 为止。这种一级一级的链结构就称为原型链

实现方式:

要实现继承,就必须要提供个父类,继承谁,就提供继承的属性,主要有六种方式可以实现js继承: 原型继承、原型链继承、构造函数继承、组合继承、寄生继承、寄生组合式继承

父类属性:

function Animal(name){
  //属性
  this.name  = name
  //实例方法
  this.call=function(call){
    console.log(this.name + '在'+'call'+'叫')
  }
}
//原型方法
Animal.prototype.eat = function(food){
  console.log(this.name + '在吃' + food);
}

原型继承:

function Cat(name){
  let animal = new Animal();
  animal.name = name;
  return animal;
}
let cat = new Cat();

实现思路:复制一个对象,用函数来包装,用一个函数包装一个对象,然后返回这个函数的调用

优点:

1、 不限制调用方式

2、 继承简单,容易实现

缺点:

1、所有实例都会继承原型上的属性

2、无法实现复用以内新实例属性都是从后面添加

原型链继承:

function Cat(){ 
}
Cat.prototype= new Animal();
Cat.prototype.name = '喵喵';
let cat = new Cat();

实现思路:复新实例的原型,等于父类的实例

优点:

1、 继承易于实现,父类的新增的实例与属性子类都能访问

缺点:

1、创建子类实例时,新实例无法向父类构造函数传参

2、继承比较单一,无法实现多继承

3、所有新实例都会共享父类实例的属性

4、要新增加原型属性和方法需要在new 父类构造函数的后面