当前位置: 首页 > ai >正文

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​

忽略该图的细节(如内存地址值没有用二进制)
以下是对该图进一步的理解和总结

1. JS 对象概念的辨析

  • 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁)

  • 明确 Object 也是 JS 默认执行的, 可以理解为 var Object = new Object()​ 是 JS 默认执行的

  • 明确 Function 也是对象

    可以这样理解 `var Function = new Object()` 是JS默认执行的
    
  • 明确任何一个函数也是一个对象(即我们所说的类型对象(类型对象就是用 function fn(){}​ ​创建出来的函数对象),与之对应的实例对象就是指通过调用构造方法 new 创建的对象或者说直接用{}创建的对象(本质也是调用构造函数))

    	/** 如何理解任何一个函数也是一个对象**/// 1. 函数不光可以用function关键字创建也可以用如下方法创建var fn =  new Function(); // 等同于 function fn(){}// 2. Function 也是对象,是这样来的var Function = new Object();// 3. Object() 是什么:构造方法(JS默认定义的)
    

2. JS 原型对象的辨析

  • 首先是一个对象

  • 其次在代码中表现为:有一个属性其指向这个空对象(或者说是有一个变量,该变量储存该对象的地址)

3. JS 隐式原型和显式原型的辨析

  • 显式原型:即在函数中有一个属性叫 prototype 其指向一个空的对象(或者说这个属性的值保存这个空对象的地址值),这个属性就叫做显式原型对象(或者说这个属性保存的地址,通过该地址寻找到一个对象,该对象叫做显式原型对象)

  • 隐式原型:对象中同样有一个属性叫__proto__其指向一个空的对象(或者说这个属性的值保存这个空对象的地址值),这个属性就叫做隐式原型对象(或者说这个属性保存的地址,通过该地址寻找到一个对象,该对象叫隐式原型对象)

    • 【 需要注意的是一般来说 JS 在创建对象的时候自动把__proto__指向其构造函数的 prototype(也就是说会运行如下代码 proto = prototype​) 这两个变量保存同一个空对象的地址】

通常我们会有一句话概括上面的内容:即一个对象(这里的对象是指实例对象)的隐式原型对象指向其构造函数(这里是指构造函数对象)的显式原型对象

4. Object 的原型对象中的__proto__

  • 特殊的:明确 Object 显式原型对象的__proto__(隐式原型对象)值为 null,因为不为 null 那就无限循环了(特殊情况)

5. 原型链查找

根据图以及 1-4 的铺垫,可以总结为,首先在该对象上找然后-> 找其隐式原型对象-> 一直往上找到那个__proto__为 null 的对象终止(期间找到了就返回,停止继续往上搜索)

http://www.xdnf.cn/news/12809.html

相关文章:

  • Alight Motion汉化版:视频剪辑,轻松上手
  • odoo17 反常下表引用上表并能修改
  • 在数字工厂实施过程中,如何学会通过梳理流程的思想来分析解决问题
  • 2014-2023年 最新绿色债券数据
  • 大数据CSV导入MySQL
  • word操作(持续更新)
  • 从菜鸟到骑士:TypeScript 基础修炼手册
  • 磁盘空间清道夫FolderSize 系列:可视化分析 + 重复文件识别,
  • 设备健康管理的范式革命:中讯烛龙全链路智能守护系统
  • QTreeWidget 应用场景与用法详解
  • 华为OD机试-食堂供餐-二分法
  • 408第一季 - 数据结构 - 图II
  • MS8551/MS8552/MS8554 单电源、轨到轨输入输出、高精度运放,可替代AD8551/AD8552/AD8554
  • Android 大文件分块上传实战:突破表单数据限制的完整方案
  • 把二级域名绑定的wordpress网站的指定页面
  • 【论文阅读28】-CNN-BiLSTM-Attention-(2024)
  • UML用例模型与用例图
  • 【RK3588嵌入式图形编程】-Cairo- 变换、旋转、缩放、剪切
  • C++基础进阶:函数、内联函数与Lambda函数详解
  • 开源项目实战学习之YOLO11:12.8 ultralytics-models-utils.py
  • 分布式锁实战:Redisson vs. Redis 原生指令的性能对比
  • 论文MR-SVD
  • [嵌入式AI从0开始到入土]18_Ascend C算子开发环境(S5赛季)
  • 大模型在蛛网膜下腔出血预测与诊疗方案制定中的应用研究
  • 从零开始学Flink:揭开实时计算的神秘面纱
  • jieba实现和用RNN实现中文分词的区别
  • Git配置代理
  • LinuxSamba服务器配置篇
  • 在uniCloud云对象中定义dbJQL的便捷方法
  • MCP是啥?技术原理是什么?Windows系统配置MCP,Cursor使用MCP