JavaScript原型链实现行为扩展的核心是通过__proto__或prototype向上查找方法属性,支持复用、覆盖与增强:挂载方法到构造函数prototype供实例共享;用Object.setPrototypeOf动态扩展单对象;通过Object.create建立继承链并重写方法;ES6 class语法糖封装原型操作,使继承更直观。

JavaScript 中用原型链实现行为扩展,核心是让对象通过 __proto__(或构造函数的 prototype)向上查找方法和属性,从而复用、覆盖或增强已有行为。
把方法挂到构造函数的 prototype 上
这是最基础也最常用的方式。所有该构造函数创建的实例,都能共享 prototype 上的方法:
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + ' makes a sound');
};
const dog = new Animal('Dog');
dog.speak(); // "Dog makes a sound"
- 方法只定义一次,节省内存
- 实例修改自身属性不影响其他实例
- 后续给
Animal.prototype添加新方法,已有实例也能立即使用
用 Object.setPrototypeOf 或 __proto__ 动态扩展单个对象
不改动构造函数,只为某个具体对象添加行为,适合临时增强或调试:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const cat = { name: 'Whiskers' };
Object.setPrototypeOf(cat, {
meow() { console.log(this.name + ' says meow!'); }
});
cat.meow(); // "Whiskers says meow!"
- 避免污染全局 prototype,更安全
- 适用于对象字面量或第三方对象的轻量扩展
- 注意:频繁修改
__proto__可能影响性能,生产环境慎用
继承并扩展父类行为(子类复用 + 重写)
通过原型链模拟“类继承”,子构造函数的 prototype 指向父类实例,再补充自己的方法:
立即学习“Java免费学习笔记(深入)”;
function Dog(name, breed) {
Animal.call(this, name); // 继承实例属性
this.breed = breed;
}
// 建立原型链:Dog.prototype → Animal.prototype
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
// 扩展行为:覆盖 speak,同时复用父逻辑
Dog.prototype.speak = function() {
Animal.prototype.speak.call(this); // 先执行父类逻辑
console.log(this.name + ' barks loudly!');
};
- 用
Object.create(Animal.prototype)正确建立继承链 - 手动修复
constructor指向,避免混淆 - 子类方法中可用
Parent.prototype.method.call(this)显式调用父逻辑
用 ES6 class 语法简化原型链操作
class 是原型链的语法糖,底层仍是基于 prototype,但写法更清晰、不易出错:
class Animal {
constructor(name) { this.name = name; }
speak() { console.log(this.name + ' makes a sound'); }
}
class Dog extends Animal {
constructor(name, breed) {
super(name);
this.breed = breed;
}
speak() {
super.speak(); // 等价于 Animal.prototype.speak.call(this)
console.log(this.name + ' barks loudly!');
}
}
-
extends自动设置原型链和 constructor -
super()和super.method()让调用父逻辑更直观 - 本质没变,只是封装了
Object.create、call等底层操作

















