对象、原型、构造函数是围绕“如何创建和复用对象”形成的协作结构:构造函数初始化实例,原型对象共享方法属性,实例对象是具体个体。

对象、原型、构造函数三者不是并列关系,而是围绕“如何创建和复用对象”形成的协作结构:构造函数负责初始化实例,原型对象负责共享方法和属性,实例对象则是运行时的具体个体。
构造函数是“造人模具”
它本质是个普通函数,但被 new 调用时就切换身份——自动创建空对象、绑定 this、设置 __proto__ 指向其 prototype,最后返回实例。命名习惯(首字母大写)和 new 的配合,是识别它的关键信号。
- 没有 new,它就是普通函数,this 指向可能混乱
- 每个函数都有 prototype 属性,但只有作为构造函数使用时,这个属性才真正参与对象创建流程
- prototype 是一个对象,不是函数,它默认带一个 constructor 属性,指回构造函数本身
原型对象是“公共工具箱”
它由构造函数的 prototype 属性指向,是所有该构造函数实例共享的方法和属性的存放地。实例自身不复制这些内容,而是通过内部的 __proto__ 链接去查找。
- 实例没有 prototype 属性(访问会得 undefined),只有 __proto__
- __proto__ 是实例的隐式原型,它和构造函数的 prototype 是同一对象(instance.__proto__ === Constructor.prototype)
- 往 prototype 上添加方法,所有已有和未来的实例立刻可用
实例对象是“活的个体”
它是构造函数执行后产生的具体对象,拥有自己独有的属性(如 this.name),同时能透明地使用原型上的共享能力(如 sayHi())。它的行为依赖两条链路:
- 自己的属性和方法:优先从实例自身读取
- 未定义的属性和方法:沿着 __proto__ 向上查找,直到找到或抵达 Object.prototype
- 这种逐级向上查找的路径,就是原型链,也是 JavaScript 实现继承的基础
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











