JavaScript对象字面量中常量与全局变量的内部封装及访问控制咨询
在JavaScript对象字面量中封装私有常量与内部变量的最佳方案
要在对象字面量中实现仅内部指定方法可访问的常量和变量,最优方案是利用闭包创建私有作用域——通过立即执行函数表达式(IIFE)包裹私有成员,让对象的方法在闭包中捕获这些成员,外部无法直接访问。
示例改造实现
把原全局的cst_TEST和glb_TEST移到IIFE的私有作用域中,返回包含目标方法的对象,这样只有fxAAA()、fxBBB()、fxCCC()能访问这两个变量:
const kOBJ = (() => { // 私有常量,仅内部方法可访问 const cst_TEST = { firstName: "John", lastName: "Deacon" }; // 私有内部变量,仅内部方法可访问 let glb_TEST = { age: "30" }; return { fxAAA() { console.log("First Name: " + cst_TEST.firstName); }, fxBBB() { console.log("Last Name: " + cst_TEST.lastName); }, fxCCC() { console.log("Age: " + glb_TEST.age); } }; })();
验证输出
调用方法时和原效果一致,且外部无法直接访问私有成员:
<script> kOBJ.fxAAA(); // 输出: First Name: John kOBJ.fxBBB(); // 输出: Last Name: Deacon kOBJ.fxCCC(); // 输出: Age: 30 // 以下代码会报错/返回undefined,因为外部无法访问私有成员 // console.log(kOBJ.cst_TEST); // console.log(kOBJ.glb_TEST); </script>
方案优势
- 真正实现私有性:外部无法直接访问
cst_TEST和glb_TEST,避免全局污染 - 语义清晰:用
const声明不可变的常量,let声明可修改的内部变量 - 逻辑简洁:内部方法直接访问闭包中的变量,无需额外属性访问语法
内容的提问来源于stack exchange,提问作者brut65
相关产品推荐
相关产品推荐

