当前位置:首页 > JavaScript

js 多态实现

2026-02-01 00:58:56JavaScript

多态的概念

多态是面向对象编程的核心特性之一,指同一操作作用于不同对象时产生不同行为。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('Bark!');
};

const animal = new Animal();
const dog = new Dog();

animal.sound(); // Animal makes sound
dog.sound();    // Bark!

基于class语法的多态

ES6 class语法通过extends和super实现更清晰的多态:

js 多态实现

class Shape {
  draw() {
    console.log('Drawing shape');
  }
}

class Circle extends Shape {
  draw() {
    console.log('Drawing circle');
  }
}

const shape = new Shape();
const circle = new Circle();

shape.draw(); // Drawing shape
circle.draw(); // Drawing circle

鸭子类型实现多态

JavaScript作为动态类型语言,通过"鸭子类型"实现多态,只关注对象行为而非类型:

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

const cat = {
  sound: () => console.log('Meow')
};

const car = {
  sound: () => console.log('Vroom')
};

makeSound(cat); // Meow
makeSound(car); // Vroom

参数多态实现

通过函数参数不同实现不同行为:

function calculateArea(shape, ...args) {
  if (shape === 'circle') {
    return Math.PI * args[0]  2;
  } else if (shape === 'rectangle') {
    return args[0] * args[1];
  }
}

console.log(calculateArea('circle', 5)); // 78.53981633974483
console.log(calculateArea('rectangle', 4, 5)); // 20

多态应用建议

  1. 优先使用class语法实现继承多态,代码结构更清晰
  2. 接口多态适合需要灵活扩展的场景
  3. 避免过度使用鸭子类型,适当增加类型检查保证可靠性
  4. 复杂多态场景可考虑使用TypeScript增强类型安全

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

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现倒计时

js 实现倒计时

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

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…