js 实现封装
封装的概念
封装是面向对象编程的三大特性之一,主要目的是隐藏对象的内部细节,仅对外暴露必要的接口。通过封装可以提高代码的可维护性和安全性。
实现封装的方式
使用闭包 通过函数作用域实现私有变量,只暴露需要公开的方法:
function createCounter() {
let count = 0; // 私有变量
return {
increment() {
count++;
},
getCount() {
return count;
}
};
}
const counter = createCounter();
counter.increment();
console.log(counter.getCount()); // 1
console.log(counter.count); // undefined
ES6 Class 语法
通过类定义中的 # 前缀声明私有字段:
class Counter {
#count = 0; // 私有字段
increment() {
this.#count++;
}
getCount() {
return this.#count;
}
}
const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 1
console.log(counter.#count); // 报错
模块模式 利用 IIFE 立即执行函数创建私有作用域:
const module = (function() {
let privateVar = 'secret';
function privateMethod() {
return privateVar;
}
return {
publicMethod() {
return privateMethod();
}
};
})();
console.log(module.publicMethod()); // "secret"
console.log(module.privateVar); // undefined
封装的优势
- 数据保护:防止外部直接修改内部状态
- 接口稳定:内部实现变更不影响外部调用
- 降低耦合:模块间通过清晰接口通信
注意事项
- TypeScript 提供更完善的
private修饰符 - 浏览器环境可能需要 Babel 转译私有字段语法
- 过度封装可能导致代码复杂度增加







