• JS | 函数高级之原型、原型链


    目录

    一、原型

    二、显式原型与隐式原型

    三、原型链

    四、注意点


    我感觉原型链还是比较重要的,但是老师上课的时候一带而过,有点懵逼,所以在这里稍微概括一下,更复杂的图也没有在这里Po出来,但是这些应该够用,希望对大家有点用处。

    一、原型

    1. 每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为:原型对象);原型对象中有一个属性constructor,它指向函数对象。
    2. 给原型对象添加属性(一般都是方法)。作用:函数的所有实例对象自动拥有原型上的属性(方法)

    图释: 

     代码:

    假设有一个Date函数,那么 Date.prototype.constructor === Date

    二、显式原型与隐式原型

    1. 每个函数function都有一个prototype,即显式原型(属性)
    2. 每个实例对象都有一个__proto__,可称为隐式原型(属性)
    3. 对象的隐式原型的值为其对应函数的显式原型的值 (函数.prototype === 实例对象.__proto__)
    4. 内存结构 

     总结:

    • 构造函数的prototype属性:在定义函数时自动添加的,默认值是一个空Object对象
    • 实例对象的__proto__属性:创建对象时自动添加的,默认值为构造函数的prototype属性值
    • 程序员能直接操作显式原型,但不能直接操作隐式原型(ES6之前)

    三、原型链

    访问一个对象的属性时,先在自身属性中查找,找到返回,如果没有,再沿着__proto__这条链向上查找,找到返回,如果最终没有找到,返回undefined。所以说原型链是一个隐式原型链,它的作用就是查找对象上的属性(方法)

    四、注意点

    1. 函数的显示原型指向的对象默认是空Object实例对象(但Object不满足)
    2. 所有函数都是Function的实例(包含Function),因为所有的函数都是new Function出来的,所以所有函数的__proto__都一样
    3. Object的原型对象是原型链的尽头(Object.prototype.__proto__ = null)
    4. 一个函数即有显示属性也有隐式属性。

    好啦,今天主要就是讲了一下原型、显示原型/隐式原型以及原型链,拜比~

  • 相关阅读:
    vue重修004上部
    面试_⼦数组类问题
    【Java第29期】:Tomcat的安装和使用
    超详细MySQL总结[从百草园到三味书屋]
    ​CUDA学习笔记(五)GPU架构
    工业制造行业的低代码开发平台思维架构图
    Curl 命令方式对elasticsearch备份和恢复
    SpringBoot 异步任务-Guava 中EventBus
    C++11 Thead线程和线程池
    软件工程理论与实践 (吕云翔) 第六章 面向对象分析课后习题及其解析
  • 原文地址:https://blog.csdn.net/m0_72383454/article/details/126677581