当前位置:首页 > JavaScript

js实现多态

2026-04-06 16:40:22JavaScript

多态的概念

多态是面向对象编程的核心概念之一,指同一操作作用于不同对象时产生不同的行为。在JavaScript中,由于语言本身的动态特性,实现多态的方式与静态类型语言(如Java)有所不同。

基于原型链的多态实现

JavaScript通过原型链实现继承,子类可以重写父类的方法以实现多态:

function Animal() {}
Animal.prototype.speak = function() {
  console.log('Animal sound');
};

function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.speak = function() {
  console.log('Woof!');
};

function Cat() {}
Cat.prototype = Object.create(Animal.prototype);
Cat.prototype.constructor = Cat;
Cat.prototype.speak = function() {
  console.log('Meow!');
};

const animals = [new Animal(), new Dog(), new Cat()];
animals.forEach(animal => animal.speak());

基于ES6类的多态实现

ES6引入class语法糖,使多态实现更直观:

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

class Dog extends Animal {
  speak() {
    console.log('Woof!');
  }
}

class Cat extends Animal {
  speak() {
    console.log('Meow!');
  }
}

const animals = [new Animal(), new Dog(), new Cat()];
animals.forEach(animal => animal.speak());

基于鸭子类型的多态

JavaScript的弱类型特性允许不依赖继承实现多态(鸭子类型):

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

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

makeSound(dog);
makeSound(cat);

多态的高级应用

利用参数多态实现更灵活的行为:

class Calculator {
  add(a, b) {
    return a + b;
  }
}

class StringCalculator extends Calculator {
  add(a, b) {
    return `${a}${b}`;
  }
}

const numCalc = new Calculator();
const strCalc = new StringCalculator();

console.log(numCalc.add(1, 2));    // 3
console.log(strCalc.add('1', '2')); // '12'

多态的设计模式应用

策略模式是多态的典型应用:

js实现多态

class PaymentStrategy {
  pay(amount) {}
}

class CreditCardStrategy extends PaymentStrategy {
  pay(amount) {
    console.log(`Paid ${amount} via Credit Card`);
  }
}

class PayPalStrategy extends PaymentStrategy {
  pay(amount) {
    console.log(`Paid ${amount} via PayPal`);
  }
}

class ShoppingCart {
  constructor(strategy) {
    this.strategy = strategy;
  }

  checkout(amount) {
    this.strategy.pay(amount);
  }
}

const cart1 = new ShoppingCart(new CreditCardStrategy());
const cart2 = new ShoppingCart(new PayPalStrategy());

cart1.checkout(100);
cart2.checkout(200);

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

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现代码雨

js实现代码雨

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

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…