当前位置:首页 > JavaScript

js 多态的实现

2026-04-04 03:14:14JavaScript

多态的概念

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

基于原型链的多态实现

JavaScript中每个对象都有一个隐藏的[[Prototype]]属性指向其原型对象。当访问对象属性时,若当前对象不存在该属性,会沿原型链向上查找。

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!

基于类继承的多态实现

ES6引入class语法后,可通过extends实现继承和方法重写:

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

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

const animal = new Animal();
const dog = new Dog();
animal.sound(); // Animal makes sound
dog.sound();    // Bark!

鸭子类型实现多态

JavaScript是动态类型语言,更关注对象行为而非类型,通过"鸭子类型"实现多态:

js 多态的实现

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

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

makeSound(cat); // Meow!

多态的应用场景

  1. 统一接口不同实现:如不同表单验证策略
  2. 插件系统设计:允许第三方扩展核心功能
  3. 算法替换:运行时动态切换算法实现

注意事项

  1. 避免过度使用多态导致代码复杂度增加
  2. 使用TypeScript可增强多态的类型安全性
  3. 性能敏感场景需注意原型链查找带来的开销

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

相关文章

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

php多态实现

php多态实现

PHP 多态的实现方法 多态是面向对象编程的三大特性之一,允许不同类的对象对同一消息做出响应。PHP 主要通过以下方式实现多态: 通过继承和方法重写 子类继承父类并重写父类方法,实现不同子类对同一方…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…