JS 原型总结
JS世界的构造顺序
- 创建根对象 #101(toString),根对象没有名字
- 创建函数的原型 #208(call /apply),原型 __p 为 #101
- 创建数组的原型 #404(push/pop),原型 __p 为 #101
- 创建 Function #342,原型 __p 为 #208
- 用 Function.prototype 存储函数的原型,等于 #208
- 此时发现 Function 的 __proto__ 和 prototype 都是 #208
- 用 Function 创建 Object
- 用 Object.prototype 存储对象的原型,等于 #101
- 用 Function 创建 Array
- 用 Array.prototype 存储数组的原型,等于 #404
- 创建 window 对象
- 用 window 的 'Object' 'Array' 属性将 7 和 9 中的函数命名
- 记住一点,JS 创建一个对象时,不会给这个对象名字的
构造函数的构造顺序
- 用 new Object() 创建 obj1
- new 会将 obj1 的原型 __p 设置为 Object.prototype,也就是 #101
- 用 new Array() 创建 arr1
- new 会将 arr1 的原型 __p 设置为 Array.prototype,也就是 #404
- 用 new Function 创建 f1
- new 会将 f1 的原型 __p 设置为 Function.prototype,也就是 #208
自定义构造函数的构造顺序
- 自己定义构造函数 Person,函数里给 this 加属性
- Person 自动创建 prototype 属性和对应的对象 #502
- 在 Person.prototype #502 上面加属性
- 用 new Person() 创建对象 p
- new 会将 p 的原型 __p 设为 #502

三大公式概念
对象有__proto__
构造函数有 prototype,但它也是对象,所以也有__proto__
1.JS公式
- 某类对象.__proto__ === 其构造函数.prototype
- Object构造函数.prototype.__proto__ === null
- 他们都指向原型,原型上会写可以继承、使用的属性
2.根公理
- 各类对象.__proto__ === Object.prototype
- Object.prototype 是所有对象的(直接或间接)原型
- 加了一个直接或者间接,所谓公理就是规定好的
3.函数公理
- 所有函数都是Function构造的
- 任何构造函数.__proto__ === Function.prototype
- 构造函数有三类Object/Array/Function
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话