欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 小白也能彻底理解的prototype原型链第二篇

程序员文章站 2022-07-02 15:28:08
前言回顾一下,上一篇文章主要通过构造函数与其实例对象讲解了原型对象、构造函数和隐式原型链之间的关系及用法,希望没看过的同学去先去看看第一篇再来。这一篇我们主要是来完整的学习下原型链。首先需要了解的__proto__和constructor属性是一般对象所独有的函数也是一种对象,且独有prototype属性null和undefined不属于一般对象1.构造函数与实例对象之间的原型链function Person () {}let person1 = new Person()以上代码大...

前言

回顾一下,上一篇文章主要通过构造函数与其实例对象讲解了原型对象、构造函数和隐式原型链之间的关系及用法,希望没看过的同学去先去看看第一篇再来。

这一篇我们主要是来完整的学习下原型链。

首先需要了解的

  • __proto__和constructor属性是一般对象所独有的
  • 函数也是一种对象,且独有prototype属性
  • null和undefined不属于一般对象

1.构造函数与实例对象之间的原型链

function Person () {}
let person1 = new Person()

以上代码大家应该很熟悉了,尤其再配上下面这张图。

荐
                                                        小白也能彻底理解的prototype原型链第二篇

原型链指的是对象在获取其属性时,首先会查找它自身的属性,如果找不到,会沿着原型链一级一级向上查找属性,如果找到会停止向上查找并返回属性值,如果找不到则返回undefined。以上图例中,绿色的那一条线就是原型链。

2.函数的原型链

(1).描述

  • 所有函数的构造函数都是Function(Function函数的构造函数也是它本身Function)
  • 相对应的函数隐式原型链的上一级都是Function.prototype,再往上是Object.prototype,最上一级指向null

(2).图解

foo为自定义函数,其余ObjectFunctionSymbol等函数为js中原生构造函数。以下蓝色线条都为函数的隐式原型链。

荐
                                                        小白也能彻底理解的prototype原型链第二篇

(3).结论

一个函数的隐式原型链指向如下

3.对象的原型链

(1).基础回顾

在javascript入门时相信大家都了解过js的几种基本数据类型。加上es6之后加上的SymbolBigInt一种八种。

  • Boolean
  • Null
  • Undefined
  • Number
  • BigInt
  • String
  • Symbol
  • Object

(2)非一般对象

这个非一般对象是我自己起的名