个人理解:
所有实现继承的实现主要是根据 原型链,构造属性来完成。
根据设计规范所衍生出了不同的方法
在Objec.create方法出现之前,主要依靠三种方法:
- 原型链继承
- 构造函数继承
- 组合继承(原型继承 + 构造继承)
在Objec.create方法出现之后,衍生出了另外三种:
- 原型式继承
- 寄生式继承
- 寄生组合继承
ES6规范出台后:
- class 类
Object.create()
接收两个参数:
proto, 创建对象的原型对象 , 默认为 Object.prototype
propertiesObject,可选参数 , 默认新对象的属性,对应Object.defineProperties()的第二个参数
该方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
具体可查看https://developer.mozilla.org/zhCN/docs/Web/JavaScript/Reference/Global_Objects/Object/create
根据原型链的特点, 实例的__proto__ 指向 构造函数的 prototype
在使用时, 我们应当这样使用:
function Person (){
}
const person = Object.create(Person.prototype)
console.log(person.__proto__ === Person.prototype)
console.log(person.__proto__.construtor === Person.prototype.construtor);
在实际使用过程中,Object.create帮助我们省去了原型指向的过程
组合继承
顾名思义, 通过指向原型+指定构造函数的方式来达到继承目的
function Parent(sex){
this