当前位置:首页 > JavaScript

js 多态实现

2026-03-13 23:07:58JavaScript

多态的基本概念

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

js 多态实现

基于原型链的多态实现

JavaScript 使用原型继承实现多态。通过重写原型方法,子类可以覆盖父类行为。

js 多态实现

function Animal() {}
Animal.prototype.sound = function() {
  console.log('Animal makes a 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 a sound
dog.sound();    // Dog barks

基于类的多态实现(ES6+)

ES6 引入 class 语法糖,可以更直观地实现多态。

class Animal {
  sound() {
    console.log('Animal makes a sound');
  }
}

class Dog extends Animal {
  sound() {
    console.log('Dog barks');
  }
}

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

animal.sound(); // Animal makes a sound
dog.sound();    // Dog barks

鸭子类型实现多态

JavaScript 是动态类型语言,不检查对象类型而关注对象是否具有特定方法或属性。

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

const myDog = {
  sound: () => console.log('Woof!')
};

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

makeSound(myDog); // Woof!
makeSound(myCat); // Meow!

多态的应用场景

  1. 插件系统:不同插件实现相同接口但行为不同
  2. UI组件:基础组件和定制组件共享接口
  3. 算法策略:不同策略对象实现相同方法

注意事项

  1. 原型方法重写时注意正确设置原型链
  2. 使用 class 语法时注意 super 调用
  3. 鸭子类型需要良好的文档约定
  4. 类型检查可结合 TypeScript 增强安全性

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

相关文章

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…