当前位置:首页 > JavaScript

js多态实现

2026-02-01 23:18:16JavaScript

多态的概念

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

基于原型链的多态实现

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

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是动态类型语言,更倾向于"鸭子类型"的多态实现:

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唯一性实现更安全的多态:

js多态实现

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 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…

用js实现vue

用js实现vue

用 JavaScript 实现 Vue 核心功能 Vue.js 是一个渐进式框架,其核心功能包括响应式数据绑定、虚拟 DOM 和组件系统。以下是一个简化版的实现,展示如何用原生 JavaScript…