将公共方法绑定到构造函数的 prototype 上可实现函数共享、节省内存、支持继承和统一维护;应避免在构造函数内用 this 赋值或 class 中用箭头函数定义方法,以防实例私有化。

把公共方法绑定到构造函数的 prototype 上,是为了让所有实例共享同一份函数体,避免每次 new 都重新创建,从而节省内存、支持继承,也便于统一维护。
直接在 prototype 上添加方法
定义构造函数后,用点语法逐个挂载:
function Person(name) { this.name = name; }Person.prototype.sayHi = function() { return `Hello, I'm ${this.name}`; };- 之后
new Person('Alice')和new Person('Bob')调用sayHi(),实际执行的是同一个函数,a.sayHi === b.sayHi返回true。
批量挂载多个方法
避免重复写 Constructor.prototype.xxx = ...,可用 Object.assign 一次性注入:
Object.assign(Person.prototype, {-
sayHi() { return `Hi, ${this.name}`; }, -
getName() { return this.name; } });
用 class 语法自动挂载
ES6 的 class 是语法糖,内部普通方法默认就绑定到原型上:
class Person {-
constructor(name) { this.name = name; } -
sayHi() { return `Hi, ${this.name}`; } // 自动挂到 Person.prototype }console.log(typeof Person.prototype.sayHi); // "function"console.log(new Person().hasOwnProperty('sayHi')); // false(不在实例上)
务必避开的常见错误
这些写法会让方法变成实例私有,失去共享和继承能力:
- 在构造函数内用
this.xxx = function() {}—— 每个实例都存一份 - 在 class 中用字段 + 箭头函数:
sayHi = () => { ... }—— 绑定到实例,不可被子类覆盖 - 直接赋值整个
prototype = { ... }—— 会丢失默认的constructor引用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











