当前位置:首页 > JavaScript

js 实现封装 多态

2026-02-02 20:56:44JavaScript

封装与多态在 JavaScript 中的实现

封装

封装的核心在于隐藏内部细节,仅暴露必要接口。JavaScript 通过闭包、模块模式或 ES6 的 class 语法实现。

闭包实现私有变量

js 实现封装 多态

function Counter() {
  let count = 0; // 私有变量

  this.increment = function() {
    count++;
    console.log(count);
  };

  this.getCount = function() {
    return count;
  };
}

const counter = new Counter();
counter.increment(); // 输出 1
console.log(counter.count); // undefined(无法直接访问)

ES6 Class 实现

class Counter {
  #count = 0; // 私有字段(ES2022)

  increment() {
    this.#count++;
    console.log(this.#count);
  }

  getCount() {
    return this.#count;
  }
}

多态

多态允许不同对象对同一方法表现出不同行为,通常通过继承和接口实现(JavaScript 无接口,但可通过 duck typing 模拟)。

js 实现封装 多态

继承实现多态

class Animal {
  makeSound() {
    console.log("Some generic sound");
  }
}

class Dog extends Animal {
  makeSound() {
    console.log("Bark!");
  }
}

class Cat extends Animal {
  makeSound() {
    console.log("Meow!");
  }
}

const animals = [new Dog(), new Cat()];
animals.forEach(animal => animal.makeSound());
// 输出: Bark! / Meow!

Duck Typing 模拟多态

function playSound(entity) {
  if (typeof entity.makeSound === 'function') {
    entity.makeSound();
  }
}

const dog = { makeSound: () => console.log("Bark!") };
const robot = { beep: () => console.log("Beep!") };

playSound(dog); // 输出: Bark!
playSound(robot); // 无输出(不符合"鸭子类型")

关键注意事项

  • 封装:优先使用 ES6 的私有字段(#)或闭包保护数据,避免直接暴露属性。
  • 多态:通过方法重写或 duck typing 实现,注意检查对象是否实现所需方法。
  • 性能:闭包实现的私有变量会为每个实例创建方法副本,而 ES6 私有字段是共享的。

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

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现防洪

js实现防洪

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

js钟表实现

js钟表实现

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