当前位置:首页 > 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实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…