当前位置:首页 > JavaScript

js实现封装

2026-03-01 00:18:55JavaScript

封装的概念

封装是面向对象编程的核心概念之一,指将数据(属性)和操作数据的方法(行为)捆绑在一起,隐藏内部实现细节,仅暴露必要的接口。JavaScript 可通过多种方式实现封装。

使用构造函数和原型

通过构造函数定义对象的属性和方法,结合原型链共享方法,避免重复创建函数实例。

js实现封装

function Person(name, age) {
    this.name = name; // 公开属性
    let _age = age;   // 私有变量(通过闭包实现)

    this.getAge = function() { 
        return _age; 
    };
    this.setAge = function(age) { 
        _age = age; 
    };
}

Person.prototype.greet = function() {
    console.log(`Hello, I'm ${this.name}`);
};

使用 ES6 的 Class 语法

ES6 的 class 语法糖简化了封装实现,结合 # 私有字段(ES2022)或闭包实现私有成员。

class Person {
    #age; // 私有字段(ES2022+)
    constructor(name, age) {
        this.name = name;
        this.#age = age;
    }

    getAge() { 
        return this.#age; 
    }

    setAge(age) { 
        this.#age = age; 
    }
}

闭包实现私有性

利用函数作用域和闭包隐藏私有变量,仅暴露公共接口。

js实现封装

const createPerson = (name, age) => {
    let _age = age; // 私有变量
    return {
        getName: () => name,
        getAge: () => _age,
        setAge: (newAge) => { _age = newAge; }
    };
};

模块模式

通过 IIFE(立即执行函数)返回对象,隔离作用域实现封装。

const personModule = (() => {
    let privateAge = 0;
    const privateMethod = () => console.log('Private');

    return {
        publicMethod: () => {
            privateMethod();
            console.log('Public');
        }
    };
})();

使用 WeakMap 存储私有数据

利用 WeakMap 的弱引用特性存储私有属性,避免内存泄漏。

const privateData = new WeakMap();

class Person {
    constructor(name, age) {
        privateData.set(this, { name, age });
    }

    getName() {
        return privateData.get(this).name;
    }
}

封装的原则

  • 最小暴露原则:仅暴露必要的接口。
  • 单一职责:每个模块或类专注于单一功能。
  • 不可变性:通过 Object.freeze() 防止对象被意外修改。

以上方法可根据场景选择,ES6 的 class 和私有字段是推荐的主流方案。

标签: js
分享给朋友:

相关文章

js实现动画

js实现动画

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

js实现复制

js实现复制

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

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现点击显示和隐藏

js实现点击显示和隐藏

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

js 实现递归

js 实现递归

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

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…