当前位置:首页 > JavaScript

js 多态实现

2026-03-13 23:07:58JavaScript

多态的基本概念

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

基于原型链的多态实现

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

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 是动态类型语言,不检查对象类型而关注对象是否具有特定方法或属性。

js 多态实现

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实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…