美文网首页
构造函数继承与类继承

构造函数继承与类继承

作者: 路耀广的前端微博 | 来源:发表于2018-01-08 13:39 被阅读0次

谈到继承我们不可避免的就要说道原型链和prototype,下面让我们用一段代码开始

上述代码中,我们创建了构造函数Animal并用它实例化了一个对象Tom,下面我们就来看一下这段代码形成的原型链。

(1)使用call或apply方法,将父对象的构造函数绑定在子对象上。

(2)使用prototype继承


上述代码将Dog的prototype指向了Animal的实例对象,这会改变constuctor的指向

因此需要手动将Dog的prototype的constuctor属性变回Dog。

(3)直接继承prototype

因为对象的公用属性或方法可以写在对象的prototype对象中,所以我们可以直接让子构造函数的prototype直接指向父构造函数的prototype实现继承。

与前一种继承的方式相比,这样做的优点是效率比较高(不用执行和建立Animal的实例了),比较省内存。缺点是 Dog.prototype和Animal.prototype现在指向了同一个对象,那么任何对Dog.prototype的修改,都会反映到Animal.prototype。

需要解决这种冲突,需要通过一层空对象去实现继承。

这里我们给child一个uber属性指向parent的prototype

(4)拷贝继承

上面一直都是使用prototype来进行继承,我们也可以换一种思路,纯粹采用"拷贝"方法实现继承。简单说,如果把父对象的所有属性和方法,拷贝进子对象,不也能够实现继承吗?

这个函数的作用,就是将父对象的prototype对象中的属性,拷贝给Child对象的prototype对象。

(5)Object.setprototype()

我们来看一下它做了什么

说到这里我们就不得不说一下__proto__(隐式原型)和prototype(显式原型)的区别了。

要讲解原型与原型链,首先,我们要了解两个基本概念——__proto__和prototype。

(1) prototype(函数的原型对象):函数才有prototype,而且所有函数必有prototype。prototype是一个对象,指向了当前构造函数的引用地址。

(2) __proto__(对象的原型):对象才有__proto__,而且所有对象必有__proto__属性(这里的对象除了我们理解的狭义对象,也包括了函数、数组等对象)。当用构造函数实例化(new)一个对象时,会将新对象的__proto__属性,指上构造函数的prototype。

相关文章

  • 前端面试准备--6.面向对象

    面向对象 1、类与实例 2、类与继承 1.借助构造函数实现继承 2.借助原型链实现继承(弥补构造函数实现继承不足)...

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • ES6面向对象

    类声明与构造函数 class 声明类constructor 构造函数 继承与超类

  • js的继承方式

    1 类式继承 子类的原型对象 2 构造函数继承 创建即继承 3 组合继承 (类式继承和构造函数...

  • 继承中执行顺序讨论

    继承中,子父类的构造函数(构造函数不被继承)1.子类必须调用父类的构造函数(构造函数不被继承)(1)如果没有写调用...

  • 构造函数继承与类继承

    谈到继承我们不可避免的就要说道原型链和prototype,下面让我们用一段代码开始 上述代码中,我们创建了构造函数...

  • JS面向对象

    类与实例 创建类 实例化 类与继承 实现继承的几种方式 方式一:利用构造函数进行继承 但是这种方法缺点是无法继承父...

  • 【Dart】Dart类与对象

    类与对象 类 继承 抽象类 接口 混入 泛型 枚举类类-简介 构造器 (构造函数) 默认构造函数与类同名的函数,在...

  • java中继承,子类是否继承父类的构造函数

    java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显...

  • ES的类与继承

    ES5中的类与继承 构造函数继承,原型继承,组合式继承 静态方法,静态属性,实例方法,实例属性 ES6中的类与继承...

网友评论

      本文标题:构造函数继承与类继承

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