在 javascript 中,将方法添加到构造函数的 prototype 上可让所有实例共享该方法,节省内存;可用 object.assign 批量添加;原型方法中 this 指向调用实例,不可用箭头函数;es6 class 的实例方法也自动定义在原型上。

在 JavaScript 中,把方法添加到构造函数的 prototype 对象上,就能让所有通过该构造函数创建的实例共享并调用这个方法。
直接在 prototype 上定义方法
这是最常用、最直观的方式。只需给构造函数的 prototype 属性添加一个函数即可:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};
const p1 = new Person('Alice');
const p2 = new Person('Bob');
p1.sayHello(); // Hello, I am Alice
p2.sayHello(); // Hello, I am Bob
这样定义的方法会被所有实例继承,且只在内存中保存一份,节省资源。
批量添加多个方法(使用 Object.assign)
如果要一次性添加多个公共方法,可以用 Object.assign() 批量挂载到 prototype:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Object.assign(Person.prototype, {
walk() { console.log(this.name + ' is walking'); },
run() { console.log(this.name + ' is running'); },
getName() { return this.name; }
});
比逐个赋值更简洁,也便于组织和维护。
注意 this 指向和避免箭头函数
原型方法中的 this 默认指向调用它的实例对象。但要特别注意:不要在 prototype 上用箭头函数定义方法,因为箭头函数没有自己的 this,会捕获外层作用域的 this,导致无法访问实例属性:
- ✅ 正确:普通函数,
this指向实例 - ❌ 错误:
Person.prototype.sayHi = () => console.log(this.name);—— 这里的this不是实例,通常为undefined或全局对象
ES6 类语法中等价写法
使用 class 时,方法默认就定义在原型上(除构造器和静态方法外):
class Animal {
constructor(name) {
this.name = name;
}
speak() { // 自动添加到 Animal.prototype
console.log(this.name + ' makes a sound');
}
}
这和手动操作 prototype 效果一致,只是语法更现代、更清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










