快速搞懂JavaScript的原型对象与原型链

一、原型/构造函数/实例

(一)浅析:

  • 原型(prototype): 一个简单的对象,用于实现对象的属性继承(可以简单理解为对象的爹)。在 Firefox 和 Chrome 中,每个JavaScript对象中都包含一个__proto__ (非标准)的属性指向它爹(该对象的原型,大多数时候叫它原型对象),可obj.__proto__进行访问

  • 构造函数: 可以通过new来 新建一个对象 的函数。

  • 实例: 通过构造函数和new创建出来的对象,便是实例。 实例通过__proto__指向原型,通过constructor指向构造函数

(二)三者的关系

  • 关系

    1
    2
    3
    4
    5
    6
    7
    8
    9

    实例.__proto__ === 原型 // 是每个对象都有的属性

    构造函数.prototype === 原型 //函数才会有prototype属性

    原型.constructor === 构造函数

    // __proto__: 是在每一个对象里面,代表这个对象继承了哪些公共的属性方法。
    // prototype: 存在于每一个函数里面,他除了一个construct属性外,还包含了一些其他的属性,方法,如果函数作为构造函数使用,这些属性方法就传会给他实例化对象。

二、原型链

1、原型链是由原型对象组成,每个对象都有 __proto__ 属性,指向了创建该对象的构造函数的原型,__proto__ 将对象连接起来组成了原型链。是一个用来实现继承和共享属性的有限的对象链