将方法挂到 prototype 上可实现实例间共享,避免重复创建函数浪费内存;实例通过原型链访问方法,p1.sayhello === p2.sayhello 为 true,且 hasownproperty 返回 false。

在 JavaScript 中,构造函数本身不直接“通过原型链实现方法共享”,而是把方法定义在构造函数的 prototype 对象上,让所有实例通过原型链自动继承并共享这些方法。
为什么要把方法挂到 prototype 上?
如果在构造函数内部用 this.method = function() {...} 定义方法,每次创建新实例都会生成一份独立的函数副本,浪费内存。而把方法写在 Constructor.prototype 上,所有实例共用同一个函数对象,真正实现共享。
基本写法:构造函数 + prototype 添加方法
例如定义一个 Person 构造函数,并让所有实例共享 sayHello 方法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
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
// p1 和 p2 共享同一个 sayHello 函数
更清晰的写法:批量设置 prototype 方法
避免反复写 Constructor.prototype.xxx = ...,可一次性赋值整个对象(注意要重设 constructor 指针):
function Person(name) {
this.name = name;
}
Person.prototype = {
constructor: Person, // 修复 constructor 指向
sayHello() {
console.log('Hello, I am ' + this.name);
},
getName() {
return this.name;
}
};
验证方法是否真的被共享
-
p1.sayHello === p2.sayHello返回 true,说明是同一函数引用 -
p1.hasOwnProperty('sayHello')返回 false,说明该方法不在实例自身,而在原型上 -
Person.prototype.isPrototypeOf(p1)返回 true,确认原型链关系成立
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










