美文网首页
构造函数与实例、原型与原型链、继承

构造函数与实例、原型与原型链、继承

作者: forever_提拉米苏 | 来源:发表于2020-07-24 12:21 被阅读0次

一、构造函数、实例

在JavaScript中,new关键字可以让一个函数变得与众不同,如下:

new改变了this的指向

这时我们称Person为一个构造函数,p1是构造函数Person的实例。

二、原型

在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。

构造函数与原型

当我们在创建对象时,可以根据自己的需求,选择性的将一些属性和方法通过prototype属性,挂载在原型对象上。每一个new出来的实例,都有一个__proto__属性,该属性指向构造函数的原型对象。通过这个属性,让实例对象也能够访问原型对象上的方法。因此,当所有的实例都能够通过__proto__访问到原型对象时,原型对象的方法与属性就变成了共有方法与属性。

而每个原型都有一个constructor属性,指向该关联的构造函数。

构造函数、实例、原型

当我们访问实例对象中的属性或者方法时,会优先访问实例对象自身的属性和方法,如果实例对象自身没有对应的属性和方法,则访问其原型或者原型的原型的对象和方法(向上查找)。

代码示例

三、原型链

每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。

原型链

例如:p1是Person的实例,Person是Function对象的实例。而Function的原型对象同时又是Object的实例。

四、继承

原型链继承:

将父类的实例作为子类的原型

原型链继承

缺点:

    引用类型的属性被所有实例共享,每个实例都有相同的属性,属性的继承无意义

    在创建Child 的实例时, 不能向Person传参

构造函数继承:

在子类的内部调用父类,通过call改变父类中this的指向,等于是复制父类的实例属性给子类

构造函数继承

优点:

    可以实现多继承,避免了引用类型的属性被所有实例共享

    创建子类实例时,可以向父类传递参数。可以在Child中向Parent传参

缺点:

    实例只是子类的实例,不是父类的实例

    无法继承原型中的方法

组合继承

使用原型链实现对原型方法的继承,而通过借用构造函数来实现对实例属性的继承。是JavaScript中最常用的继承模式

组合继承

优点:

    实例既是子类的实例,也是父类的实例

    可以向父类传参

    可以继承原型中的方法

缺点:调用了两次父类构造函数(组合继承最大的问题是无论什么情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部)

相关文章

  • 继承方法

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

  • ES5里面的对象和继承

    构造函数和原型链 注意:原型链上面的属性会被多个实例共享,而构造函数不会 web类继承Student类 原型链 ...

  • JavaScript 常用继承方式

    JavaScript 常用继承方式 原型链继承构造函数,原型,实例之间的关系:每个构造函数之间都有一个原型对象,原...

  • JavaScript高级程序设计学习笔记之继承模式

    原型链 JavaScript的继承主要依靠原型链来实现的。我们知道,构造函数,原型,和实例之间的关系:每个构造函数...

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

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

  • JavaScript

    1、介绍原型/原型链/构造函数/实例/继承 构造函数:用new 操作后面的函数,即便是空函数,结果生成一个实例原型...

  • 继承

    一、原型链 二、借用构造函数 三、组合继承 使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属...

  • 继承

    原型链 将一个构造函数的实例作为子构造函数的原型对象,这样,子构造函数的原型对象中会继承到父构造函数实例上的属性方...

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

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

  • 一篇就够-JS继承的多种方式和实现

    原型链继承 方法:子构造函数的prototype指向为父构造函数的实例,因为原型链是proto的链表,父构造函数的...

网友评论

      本文标题:构造函数与实例、原型与原型链、继承

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