当前位置:首页 > JavaScript

js 多态实现

2026-04-05 17:20:14JavaScript

多态的基本概念

多态是面向对象编程的三大特性之一,指同一操作作用于不同对象时产生不同的行为。在JavaScript中,多态主要通过原型继承、方法重写和接口模拟实现。

基于原型继承的多态

JavaScript通过原型链实现继承,子类可以覆盖父类的方法以实现多态:

js 多态实现

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('Dog barks');
};

const animal = new Animal();
const dog = new Dog();
animal.sound(); // 输出: Animal makes sound
dog.sound();    // 输出: Dog barks

基于方法重写的多态

同一方法在不同对象中表现不同行为:

js 多态实现

class Bird {
  fly() {
    console.log('Bird can fly');
  }
}

class Penguin extends Bird {
  fly() {
    console.log('Penguin cannot fly');
  }
}

const bird = new Bird();
const penguin = new Penguin();
bird.fly();    // 输出: Bird can fly
penguin.fly(); // 输出: Penguin cannot fly

基于鸭子类型的多态

JavaScript是动态类型语言,通过检查对象是否具有特定方法实现多态(“鸭子类型”):

function makeSound(animal) {
  if (animal && typeof animal.sound === 'function') {
    animal.sound();
  }
}

const cat = { sound: () => console.log('Meow') };
const car = { sound: () => console.log('Honk') };
makeSound(cat); // 输出: Meow
makeSound(car); // 输出: Honk

使用Symbol实现多态

通过唯一Symbol键避免属性名冲突,实现更灵活的多态:

const soundKey = Symbol('sound');
class Cat {
  [soundKey]() {
    console.log('Purr');
  }
}

const lion = {
  [soundKey]() {
    console.log('Roar');
  }
};

function triggerSound(obj) {
  if (obj[soundKey]) obj[soundKey]();
}

const cat = new Cat();
triggerSound(cat);   // 输出: Purr
triggerSound(lion);  // 输出: Roar

多态的应用场景

  1. 插件系统:统一接口,不同插件实现不同功能
  2. UI组件:基类定义渲染接口,子类实现具体渲染逻辑
  3. 数据处理:相同数据处理流程,不同数据源实现不同解析方式

通过合理使用多态,可以显著提升代码的可扩展性和可维护性。

标签: 多态js
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…