当前位置:首页 > JavaScript

js 多态的实现

2026-03-01 02:41:22JavaScript

多态的概念

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

基于原型链的多态实现

通过原型继承实现方法的重写,子类可以覆盖父类的方法:

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("Dog barks");
};

const animal = new Animal();
const dog = new Dog();
animal.sound(); // 输出: Animal makes sound
dog.sound();    // 输出: Dog barks

基于class语法的多态实现

ES6的class语法糖同样支持方法重写:

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

class Dog extends Animal {
  sound() {
    console.log("Dog barks");
  }
}

const animal = new Animal();
const dog = new Dog();
animal.sound(); // 输出: Animal makes sound
dog.sound();    // 输出: Dog barks

鸭子类型多态

JavaScript作为动态类型语言,不强制类型检查,只需对象具有相同接口:

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

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

const duck = {
  sound: () => console.log("Quack")
};

makeSound(cat);  // 输出: Meow
makeSound(duck); // 输出: Quack

多态的应用场景

表单验证场景中,不同表单字段可能有不同的验证逻辑:

js 多态的实现

class Validator {
  validate() {
    throw new Error("validate() must be implemented");
  }
}

class EmailValidator extends Validator {
  validate(value) {
    return /@/.test(value);
  }
}

class NumberValidator extends Validator {
  validate(value) {
    return !isNaN(value);
  }
}

const validators = {
  email: new EmailValidator(),
  age: new NumberValidator()
};

function validateField(type, value) {
  return validators[type].validate(value);
}

多态的优势

代码扩展性强,新增类型只需添加新类而不修改现有逻辑。维护性好,相关行为集中在各自类中。可读性高,通过方法名即可理解行为意图。

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

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现左右滑动

js实现左右滑动

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