• 第二十三章 原型链


    一、原型链

    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

  • 相关阅读:
    FFmpeg 命令:从入门到精通 | ffmpeg 命令直播
    js 给选中的文字添加颜色、替换文字内容...,选中状态去除后更改还在(document.execCommand)
    Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。
    SAP ABAP debug的七种方法及错误消息定位
    ARM的七种工作模式
    JavaScript 在前端开发中有什么应用?
    大数据分析案例-基于随机森林模型对北京房价进行预测
    关于解释型语言和编译性语言的区别
    windows10 Docker Desktop中部署clickhouse
    Github每日精选(第60期):使用 HTML5 画布从 DOM 节点生成图像html-to-image
  • 原文地址:https://blog.csdn.net/Girasoles/article/details/128129472