全网最详细最适合小白寄生组合试继承简洁版

43 阅读1分钟
/*
组合继承是 JavaScript最常用的继承模式,
其最大的问题是不管在什么情况下都会调用两次超类构造函数:
一次是在创建子类原型时,一次是在子类型构造函数内部。
子类型最终会包含超类的全部实例属性。

所谓寄生组合式继承,即通过构造函数来继承属性,通过原型链继承方法,
背后的基本思路是:不必为了指定子类的原型而调用父类的构造函数,
我们所需要的无非就是父类原型的一个副本而已。

*/
// 1.首先创建一个函数
function inherit(child, parent) {
  // child 子类
  // parent 父类
  // 复制父类原型
  // Object.create()方法用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)
  const ParentPrototype = Object.create(parent.prototype)
  // 赋值给子类原型
  child.prototype = ParentPrototype
  // 子类 constructor 指回 child
  child.prototype.constructor = child

}
// Object.create(parent) => 返回一个新对象 新对象的原型  parent

// function create(o) {
//   function F() {}
//   F.prototype = o;
//   return new F();
// }


//总结
/*
inherit() 函数实现了寄生组合式继承的最简单形式,
参数有两个:子类构造函数和父类构造函数。
在函数内部进行了三步操作:第一步是创建超类原型的一个副本(parent),第二步是将新创建的对象赋值给子类的原型(Object.create(parent.prototype))。
最后一步,为创建的副本添加 constructor 属性(child.prototype.constructor = child),从而弥补因重写原型而失去的默认的 constructor 属性。

*/