当前位置: 首页 > 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.dtcms.com/a/299518.html

相关文章:

  • 学习嵌入式的第三十天-数据结构-(2025.7.21)网络编程
  • Netty中AbstractChannelHandlerContext源码分析
  • Springboot+MongoDB简单使用示例
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶(365)
  • MySQL 中 VARCHAR(50) 和 VARCHAR(500) 的区别
  • Python训练Day24
  • 机器学习入门:线性回归详解与实战
  • Javaweb————HTTP的九种请求方法介绍
  • VTK交互——CallData
  • MySQL操作进阶
  • setsockopt函数概念和使用案例
  • python---字典(dict)
  • 瑞吉外卖学习笔记
  • 基于FPGA的SPI控制FLASH读写
  • 【C++高效编程】STL queue深度剖析:从底层原理到高级应用
  • 什么是ICMP报文?有什么用?
  • 以实时语音转文字项目为例,介绍一下如何手动部署python应用到Linux服务器(附脚本)
  • 根据ip获取地址库
  • 【Git】Git下载全攻略:从入门到精通
  • 如何在 Git 中控制某些文件不被提交?
  • 图解网络-小林coding笔记(持续更新)
  • 【2025最新】浏览器插件开发选型建议:WXT、Plasmo、原生TS/JS
  • 融合为体,AI为用:数据库在智能时代的破局之道
  • Maven之依赖管理
  • 《Java 程序设计》第 6 章 - 字符串
  • 智慧城市多目标追踪精度↑32%:陌讯动态融合算法实战解析
  • 【Canvas与旗帜】条纹版大明三辰旗
  • 神经网络中的反向传播原理:驱动智能的核心引擎
  • k8s:将打包好的 Kubernetes 集群镜像推送到Harbor私有镜像仓库
  • 电子电气架构 --- 高阶智能驾驶对E/E架构的新要求