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

明辨 JS 中 prototype 与 __proto__

背景:在 Javascript 的原型链章节中,提到了两个重要的属性,分别是 prototype 和 __proto__ ,虽然学了很久但一直无法清晰的分辨这两个属性的区别。


定义:当函数被用作构造函数(通过 new 调用)时,prototype 对象会成为新创建对象的原型(即新对象的 __proto__ 会指向构造函数的 prototype )


实例

function Person(name){// 这是一个构造函数,说白了终究还是一个函数this.name = name;
}// 通过构造函数创建新的实例对象
var muxi = new Person("muxi");console.log(muxi.__proto__ === Person.prototype)    // true

说明:以上例子中,通过 new 关键字基于 Person 这个构造函数创建了一个名为 muxi 的实例,根据上面的定义可知,Person.prototype 就是 muxi 的原型,muxi.__proto__ 就指向 Person.prototype ,即 muxi.__proto__ === Person.prototype 。


知识点补充

1 prototype 是函数的属性,用于设置实例的原型,而 __proto__ 是对象的属性,指向创建它的构造函数的;

2 在上面的实例中,Person 类同时具备 prototype 与 __proto__ 属性,而 muxi 这个实例只具有 __proto__ 属性;(Person 的 prototype 属性是作为构造函数时创建的对象的原型,而 Person 的 __proto__ 指向函数本身的原型 (所有函数都是 Function 的实例,等价于 Person.__proto__ === Function.prototype ))

Person.__proto__ === Function.prototype // true
// 等价于 Person.__proto__ === window.Object.Function.prototype
http://www.lryc.cn/news/600365.html

相关文章:

  • 秋招Day19 - 分布式 - 限流
  • C++11 右值引用 Lambda 表达式
  • 基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
  • CSS3知识补充
  • git笔记(七)使用代理
  • 从一个“诡异“的C++程序理解状态机、防抖与系统交互
  • 外带服务的温度:藏在包装里的“生活共情力”
  • 从零开始的云计算生活——第三十六天,山雨欲来,Ansible入门
  • Java 注解(Annotation)详解:从基础到实战,彻底掌握元数据驱动开发
  • Containerd简介
  • C++ APM异步编程模式剖析
  • 【AcWing 830题解】单调栈
  • JVM 基础架构全解析:运行时数据区与核心组件
  • OpenCV学习探秘之二 :数字图像的矩阵原理,OpenCV图像类与常用函数接口说明,及其常见操作核心技术详解
  • kafka中生产者的数据分发策略
  • Scrapy分布式爬虫数据统计全栈方案:构建企业级监控分析系统
  • 从0到1学Pandas(七):Pandas 在机器学习中的应用
  • 详解力扣高频SQL50题之1193. 每月交易 I【简单】
  • 深度解析【JVM】三大核心架构:运行时数据区、类加载与垃圾回收机制
  • JAVA算法题练习day1
  • Word文档转HTML查看器(字体颜色、字体背景、超链接、图片、目录等全部转换为html),统计Word文档段落数量、图片数量、表格数量、列表数量
  • 英语中因首字母大小写不同而意义不同的单词表
  • pyskl-Windows系统使用自己的数据集训练(一)
  • 习题5.7 如何分解能使这些数的乘积最大
  • tauri2项目配置update自动更新在自己电脑上编译
  • 【web大前端】001_前端开发入门:创建你的第一个网页
  • 顶顶通呼叫中心系统之创建与注册分机
  • Javaweb————HTTP的九种请求方法介绍
  • 开源智能体框架(Agent Zero)
  • 学习日志19 python