JS继承 小白文

继承我的理解是 一个对象 能够使用另一个对象的方法和属性

继承需要一个父类构造函数

一、通过原型链继承

通过 创建一个 Person 的实例对象,该对象身上 不仅有 name 和 age 等方法, 也可以访问到原型链上的属性和方法

缺点是 继承的子类共用一个原型,当遇到 引用类型时, 互相影响

二、通过构造函数继承

1、首先肯定需要通过 new Son() 来触发Person.call(this)

2、new Son()时 创建了一个 新对象,修正该新对象的__proto__属性和constructor属性

3、在新对象内部创建一个属性指向this,也就是Son,如 child.fn = Son 方法,然后指向该方法,相当于在新对象child内部执行一次Son,执行完后删除该属性fn,这就是new的执行过程

4、Person.call 执行过程: 同样的,相当于在Son内部执行一次Person,通过this改变指向,this指向的就是新对象child

5、所以新对象有 name = ‘xiaobai’,age = ‘20’ 这两个属性

缺点:无法访问Person原型对象上的属性

 三、组合继承(一和二合并)

该方法既可以获得 实例属性,也可以访问Person原型链上的方法

但是在Person.call 和 new Person时获取了两份一样的实例属性,比较浪费

 四、寄生组合式继承

该方式主要是通过 共享原型 的方式来实现继承,但是有一个问题,就是 子类不能 随意添加属性和方法

这就需要通过一个中间人来解决,通过Object.create 创造出来的对象,这个对象的原型对象 指向传入的参数

下面有Object.create的原理

 

小白一个,欢迎指正

原文地址:https://www.cnblogs.com/vnwith/p/12537055.html