当前位置:首页 > JavaScript

js多态实现

2026-02-01 23:18:16JavaScript

多态的概念

多态是面向对象编程的三大特性之一,指同一操作作用于不同对象时产生不同的行为。在JavaScript中,由于语言本身的动态特性,多态的实现方式与其他静态语言有所不同。

基于原型链的多态实现

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

js多态实现

function Animal() {}
Animal.prototype.sound = function() {
    console.log("动物发出声音");
};

function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.sound = function() {
    console.log("汪汪汪");
};

function Cat() {}
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.sound = function() {
    console.log("喵喵喵");
};

const animals = [new Animal(), new Dog(), new Cat()];
animals.forEach(animal => animal.sound());

基于ES6类的多态实现

ES6引入class语法糖后,多态实现更加清晰:

class Animal {
    makeSound() {
        console.log("动物发出声音");
    }
}

class Dog extends Animal {
    makeSound() {
        console.log("汪汪汪");
    }
}

class Cat extends Animal {
    makeSound() {
        console.log("喵喵喵");
    }
}

const animals = [new Animal(), new Dog(), new Cat()];
animals.forEach(animal => animal.makeSound());

基于鸭子类型的多态

JavaScript是动态类型语言,更倾向于"鸭子类型"的多态实现:

js多态实现

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

const dog = {
    sound: () => console.log("汪汪汪")
};

const cat = {
    sound: () => console.log("喵喵喵")
};

makeSound(dog);
makeSound(cat);

多参数函数的多态实现

通过参数类型和数量的不同实现多态:

function add() {
    if (arguments.length === 2) {
        return arguments[0] + arguments[1];
    } else if (arguments.length === 3) {
        return arguments[0] + arguments[1] + arguments[2];
    }
    return 0;
}

console.log(add(1, 2));      // 3
console.log(add(1, 2, 3));   // 6

使用Symbol实现多态

利用Symbol唯一性实现更安全的多态:

const sound = Symbol('sound');

class Animal {
    [sound]() {
        console.log("动物声音");
    }
}

class Dog extends Animal {
    [sound]() {
        console.log("汪汪汪");
    }
}

const dog = new Dog();
dog[sound]();

多态的应用场景

  1. 插件系统设计:不同插件实现相同接口但行为不同
  2. UI组件库:基础组件和定制组件实现相同方法但渲染不同
  3. 游戏开发:不同角色对同一消息做出不同响应
  4. 中间件系统:不同中间件对请求处理方式不同

JavaScript的多态实现更加灵活,不需要显式接口定义,只需对象具有相应方法或属性即可实现多态行为。

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现分页

js实现分页

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

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现二叉树

js实现二叉树

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