应将方法挂载到prototype上以实现共享,构造函数仅初始化实例属性;prototype方法通过原型链被所有实例访问,需注意constructor属性的正确维护。

直接在构造函数内部定义方法,会导致每个实例都重复创建一份,浪费内存;而把方法挂到 prototype 上,所有实例就能共享同一个函数,既高效又符合面向对象的设计逻辑。
构造函数负责初始化实例属性
构造函数只管“属于这个实例”的数据,比如姓名、年龄等独立值。它不定义方法,避免重复生成函数对象。
- 用 this 绑定实例独有的属性
- 不写方法体,只设初始状态
- 首字母大写是约定,便于区分普通函数
prototype 上添加共享方法
所有通过该构造函数创建的实例,都会通过原型链访问到 prototype 上的方法。这是 JavaScript 实现“继承”和“复用”的基础方式。
- 写法: Constructor.prototype.methodName = function() { ... }
- 方法体内可用 this 访问当前实例的属性
- 修改 prototype 是动态的,新增方法会立即对已有和新实例生效
验证原型链是否生效
可以用 __proto__ 或更规范的 Object.getPrototypeOf() 查看实例的原型指向,确认它确实连到了构造函数的 prototype。
- instance.__proto__ === Constructor.prototype 应返回 true
- instance.constructor 默认指向构造函数(因 prototype.constructor 指向它)
- 调用方法时,即使实例自身没有,也能沿原型链找到并执行
注意 constructor 属性别被覆盖
如果用 Constructor.prototype = { ... } 整体替换原型对象,记得手动恢复 constructor,否则它会丢失对原构造函数的引用。
- 错误写法:Person.prototype = { sayHi() { ... } }; → constructor 变成 Object
- 正确写法:Person.prototype = { constructor: Person, sayHi() { ... } };
- 更稳妥:用 Object.defineProperty 设置不可枚举的 constructor
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











