当前位置:首页 > JavaScript

js 多态的实现

2026-04-04 03:14:14JavaScript

多态的概念

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

js 多态的实现

基于原型链的多态实现

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

js 多态的实现

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是动态类型语言,更关注对象行为而非类型,通过"鸭子类型"实现多态:

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防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…