js 多态的实现
多态的概念
多态是面向对象编程的三大特性之一,指同一操作作用于不同对象时产生不同的行为。JavaScript通过原型链和动态绑定实现多态。

基于原型链的多态实现
JavaScript中每个对象都有一个隐藏的[[Prototype]]属性指向其原型对象。当访问对象属性时,若当前对象不存在该属性,会沿原型链向上查找。

function Animal() {}
Animal.prototype.sound = function() {
console.log('Animal makes sound');
};
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.sound = function() {
console.log('Bark!');
};
const animal = new Animal();
const dog = new Dog();
animal.sound(); // Animal makes sound
dog.sound(); // Bark!
基于类继承的多态实现
ES6引入class语法后,可通过extends实现继承和方法重写:
class Animal {
sound() {
console.log('Animal makes sound');
}
}
class Dog extends Animal {
sound() {
console.log('Bark!');
}
}
const animal = new Animal();
const dog = new Dog();
animal.sound(); // Animal makes sound
dog.sound(); // Bark!
鸭子类型实现多态
JavaScript是动态类型语言,更关注对象行为而非类型,通过"鸭子类型"实现多态:
function makeSound(animal) {
if (animal && typeof animal.sound === 'function') {
animal.sound();
}
}
const cat = {
sound: () => console.log('Meow!')
};
makeSound(cat); // Meow!
多态的应用场景
- 统一接口不同实现:如不同表单验证策略
- 插件系统设计:允许第三方扩展核心功能
- 算法替换:运行时动态切换算法实现
注意事项
- 避免过度使用多态导致代码复杂度增加
- 使用TypeScript可增强多态的类型安全性
- 性能敏感场景需注意原型链查找带来的开销






