• 第二十三章 原型链


    一、原型链

    1、含义:就是对象的访问机制。从任何一个数据类型触发,由_proto_串联起来的链状结构,就是原型链

    2、原型对象 :是函数天生自带的一个属性 , prototype 是一个对象数据类型

    3、对象原型: 是对象天生自带的一个属性 , __proto__ , 指向所属构造函数的原型对象prototype

    4、任何一个对象, 如果没有准确的构造函数, 那么看做是 Object 的实例 。所有的纯粹的对象 都是Object的实例

    5、原型链的指向图

     二、原型链的详解

    1、p1身上的_proto_指向哪里?

    • 因为p1是Person的实例
    • 每一个函数天生自带一个属性prototype
    • 那么p1._proto_指向所属构造函数的prototype
    console.log(p1.__proto__ === Person.prototype) //true

    2、Person的_proto_指向哪里?

    • Person是一个构造函数,同时也是一个对象,出现了 __proto__ , 这个属性只有对象才有
    • 而函数有两层空间 , 现在访问的是对象空间
    • JS内有一个构造函数叫做Function,只要是函数,就可以看做Function的实例
    • 任何一个函数数据类型所属的构造函数都是 Function
    • Person 看做是 Function 的实例
    • Person 所属的构造函数就是 Function
    • Person._proto_指向 Function.prototype
    console.log(Person.__proto__ === Function.prototype)

    3、Function的__proto__ 指向哪里?

    • Function 是函数 有了__proto__

    • 我们在访问Function的对象空间

    • 本质是一个函数

    • 只要是函数就是Function 的实例

    • Function自己是自己的实例,指向所属构造函数的原型对象

    • Function 叫做顶级函数

     console.log(Function.__proto__ === Function.prototype)

    4、Person.prototype的__proto__ 指向哪里?

    • 只要出现 __proto__ 一定是对象特有

    • Person.prototype 是一个对象 , 而且是一个纯粹的对象

    • 所有的纯粹的对象 都是Object的实例

    • 指向 Object 的原型对象

    console.log(Person.prototype.__proto__ === Object.prototype)

    5、Function.prototype 的__proto__ 指向哪里?

    • 只要出现 __proto__ 一定是对象特有

    • Function.prototype 是一个对象 , 而且是一个纯粹的对象

    • 所有的纯粹的对象 都是Object的实例

    • 指向 Object 的原型对象

    Function.prototype.__proto__ === Object.prototype

    6、Object 的__proto__ 指向哪里?

    • __proto__属性是对象特有的属性

    • Object是一个内置构造函数

    • 现在是函数有了__proto__

    • 说明我们在访问Object对象空间

    • 本质是一个函数,只要是函数就是Function 的实例

    • 指向 Function 的原型对象

    Object.__proto__ === Function.prototype

    7、Object.prototype 的__proto__ 指向哪里?

    • 只要出现 __proto__ 一定是对象特有

    •  Object.prototype 是一个对象 , 而且是一个纯粹的对象

    • 只要是纯粹的对象都是Object的实例

    • 指向Object的原型对象

    • 最后的结果是null

    • Object.prototype.__proto__

    • 叫做顶级原型

    Object.prototype.__proto__ === null

  • 相关阅读:
    集合(容器)-List接口及实现类
    arm-linux pinctrl 和 gpio 子系统
    在springboot中实现WebSocket协议通信
    ArcgisForJS如何实现添加含图片样式的点要素?
    深度学习实战(2):肺炎预测|附数据集与源码
    【Windows Server 2019】路由服务的配置和管理
    Ubuntu安装conda以后,给jupyter安装C++内核
    【编程题】【Scratch四级】2021.03 绳子算法
    js通过正则表达式获取到img标签的任意属性
    NOIP2010 提高组 复赛 flow 引水入城
  • 原文地址:https://blog.csdn.net/Girasoles/article/details/128129472