「这是我参与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 父类构造函数的后面