当前位置:首页 > 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
分享给朋友:

相关文章

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…