当前位置:首页 > 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实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

java如何实现多态

java如何实现多态

多态的概念 多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。 实现…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…