构造函数的原型通过显式赋值组织公共接口,核心是把共享方法统一挂载到constructor.prototype上;用对象字面量批量定义需手动补constructor指针,object.assign适合安全追加方法;实例属性在构造函数内定义,原型方法共用以节省内存并保证一致性。

构造函数的原型通过显式赋值组织公共接口,核心是把共享方法统一挂载到 Constructor.prototype 上,避免每次实例化都重复创建函数,节省内存并保证方法一致性。
用对象字面量批量定义原型方法
直接给 prototype 赋一个新对象,能一次性声明多个方法。但要注意重置 constructor 指针,否则实例的 constructor 会指向 Object。
- 写法示例:
function User(name, age) {
this.name = name;
this.age = age;
}
User.prototype = {
constructor: User, // 必须手动补上
sayHello() {
return `Hi, I'm ${this.name}`;
},
isAdult() {
return this.age >= 18;
}
};
用 Object.assign 扩展已有原型
适合在已有构造函数基础上追加方法,不破坏原有 constructor 和已有方法。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 保留原 prototype 结构,安全添加:
Object.assign(User.prototype, {
updateAge(newAge) {
this.age = newAge;
},
getInfo() {
return `${this.name} (${this.age})`;
}
});
区分实例属性与原型方法的职责
构造函数内部定义的属性或方法属于实例私有;原型上定义的是所有实例共用的接口。
- 正确分工:
-
实例成员(构造函数内):存储个体数据,如
this.name、this.id -
原型成员(
prototype上):定义行为逻辑,如toString()、validate()、save() - 避免在构造函数里重复定义函数——那会导致每个实例都持有一份独立副本
验证接口是否生效
可通过实例访问原型方法,并检查 instance.constructor 是否正确指向原构造函数。
- 测试代码:
const u1 = new User('Alice', 25);
console.log(u1.sayHello()); // "Hi, I'm Alice"
console.log(u1.constructor === User); // true(前提是写了 constructor: User)
console.log(u1.__proto__ === User.prototype); // true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










