当前位置:首页 > 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

多态的应用场景

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

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
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js手势实现

js手势实现

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