美文网首页
解析“用ES5原型链实现的组合继承”

解析“用ES5原型链实现的组合继承”

作者: 老陈要上天 | 来源:发表于2021-01-13 23:06 被阅读0次

用ES5实现继承,就是用原型链实现。只要把子类和父类的原型链打通就解决了主要问题。最常用的是组合继承:

ES5实现组合继承
1、先看第1个关键语句Father.call(this, age)。这句话的作用很明显,是在Child()执行时,当执行到Father()就把this强行绑定到Child函数的上下文。我们知道函数内用声明在this下的属性/方法,是属于实例的,和this相关的就只和实例相关。在这里实例化new Child(30,”上海浦东”) 的时候,this.age=age执行时this指向Child的实例,所以最终Child的实例既拥有age属性又拥有address,也就是说子类的实例得到(继承)了父类的属性。
Father.call(this, age)解决了属性/方法定义在实例上的情形,那么下两句关键语句解决的就是属性/方法定义在函数原型上的情形。
2、看第2个关键语句Child.prototype=new Father()。这句话首先创建了一个父类实例,此时这个Father父类的实例是{age:undefined}对象;然后让Child.prototype指向这个对象,Child.prototype是干嘛的,默认情况下Child.prototype可是Child所有实例的原型,把它指向Father的实例意义就是让Child的所有实例的原型指向Father的某一个实例(或者说让Father的一个实例成为Child所有实例的原型)。那么Child子类的实例就可以顺着原型链访问到属于Father原型上的属性/方法了。原型链如下图: 3、第3个关键句Child.prototype.constructor=Child是个细节。默认情况下Child.prototype.constructor就是等于Child的(Child.prototype是{constructor:f}这么一个对象),而第2个关键语句Child.prototype=new Father()执行完,Child.prototype就被改变了,此时上面instance的constructor就会是Father,子类实例的构造器怎么能是父类呢,显然不对。所以需要显式的给constructor重新赋值Child。
题外话,为什么instance.constructor会是Father呢?constructor默认是构造函数独有的属性,也就是普通对象是没有的,instance是{age:30,address:”上海浦东”}对象,不是函数,所以没有constructor,就要去它原型上找,原型是new Father()出来的对象,也不是函数,就要再去上一级原型上找,也就是去Father.prototype上找,而Father.prototype.constructor就是Father。

相关文章

  • 解析“用ES5原型链实现的组合继承”

    用ES5实现继承,就是用原型链实现。只要把子类和父类的原型链打通就解决了主要问题。最常用的是组合继承: 1、 。这...

  • ES5和ES6 实现继承方式

    在ES5 中:通过原型链实现继承的,常见的继承方式是组合继承和寄生组合继承;在ES6中:通过Class来继承 组合...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • js实现继承的几种方式

    js实现继承有几种方式,这里我们主要探讨 原型链继承 构造继承 组合继承(原型链和构造继承组合到一块,使用原型链实...

  • javascript继承之组合继承(三)

    组合继承也叫伪经典继承,也就是组合了原型链和借用构造函数实现思想:使用原型链实现对原型属性和方法的继承,通过借用构...

  • 继承方法

    构造函数/原型/实例的关系 借助构造函数实现继承 借助原型链实现继承(弥补构造函数实现继承不足) 组合方式(组合原...

  • 继承

    原型链继承 许多OO语言都支持两种继承方式接口继承和实现继承,ES5只有实现继承,且主要依靠原型链继承。 那我们先...

  • JavaScript中继承的实现方式---笔记

    继承的几种实现方式:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承;继承的实现,一般有接口...

  • javaScript 实现继承方式

    JavaScript实现继承共6种方式:原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。

  • 浅析JS继承方法

    JS 实现继承的方法有:1.原型链继承2.构造函数继承3.组合继承(原型链继承 + 构造函数继承)4.原型式继承(...

网友评论

      本文标题:解析“用ES5原型链实现的组合继承”

      本文链接:https://www.haomeiwen.com/subject/pfudaktx.html