继承的几种方式及优缺点

  1. 借用构造函数继承,使用call或apply方法,将父对象的构造函数绑定在子对象上
  2. 原型继承,将子对象的prototype指向父对象的一个实例
  3. 组合继承

原型链继承:(不好处:子类实例共享属性,造成实例之间的属性会互相影响)
解决不好处办法是 借用构造函数(类式继承) 又出现没有原型,无法复用

function Parent() {
  this.name = "heyushuo";
}
Parent.prototype.sayParentName = function() {
  console.log(this.name);
};

function Child() {
  this.name = "kebi";
}
//1.此时把Child的原型重写了,换成了Parent的实例
//2.换句话说,原来存在Parent的实例中的属性和方法,现在也存在Child.prototype中了
Child.prototype = new Parent();
//3.在继承了Parent实例中的属性和方法后基础上,又添加了属于自己的一个新方法(这里两个名字一样会覆盖)
Child.prototype.sayChildName = function() {
  console.log(this.name);
};
var Person = new Child();
console.log(Person);
//所以现在Person指向Child的原型,Child的原型指向Parent的原型(因为Child的原型对象等于了Parent的实例,这个实例指向Parent的原型)

原型继承:

  • 优点:复用父级方法
  • 缺点:子类没有自己的属性,所有属性方法只能复用父级,处理不好容易跟别的实例串数据

组合式继承:

思路——使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数复用,又保证每个实例都有它自己的属性

你可能感兴趣的:(javascript)