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的原理
小白一个,欢迎指正