返回
用javascript来实现封装对象的秘密
前端
2023-11-06 21:12:30
在javascript中,对象是第一等公民,可以拥有自己的属性和方法。这些属性和方法默认都是公有的,也就是说,任何人都可以访问和修改它们。这是因为javascript中没有访问控制的概念,因此无法控制对属性和方法的访问。
为了解决这个问题,人们发明了模块模式。模块模式是一种设计模式,可以用来创建具有私有属性和方法的对象。模块模式的基本思想是使用立即调用函数表达式(IIFE)来返回一个对象。
IIFE 是一个立即执行的函数表达式。它的语法如下:
(function () {
// 代码
})();
IIFE 的特点是,它在被调用后立即执行。因此,IIFE 中的代码不会污染全局作用域。
模块模式通过使用IIFE 来创建一个私有作用域。在这个作用域中,可以定义私有属性和方法。私有属性和方法只能在这个作用域内访问,不能被外部代码访问。
模块模式还提供了一种方法来暴露对象的部分属性和方法,以便外部代码可以访问它们。这种方法称为暴露模块模式。暴露模块模式的语法如下:
var module = (function () {
// 私有属性和方法
var privateProperty = 10;
function privateMethod() {
console.log("This is a private method.");
}
// 公共属性和方法
return {
publicProperty: 20,
publicMethod: function () {
console.log("This is a public method.");
}
};
})();
module.publicProperty; // 20
module.publicMethod(); // This is a public method.
module.privateProperty; // undefined
module.privateMethod(); // TypeError: module.privateMethod is not a function
在上面的代码中,privateProperty
和 privateMethod
是私有属性和方法,publicProperty
和 publicMethod
是公共属性和方法。module
对象是暴露模块模式返回的对象,它只暴露了公共属性和方法,私有属性和方法只能在模块内部访问。
模块模式是一种非常强大的设计模式,可以用来创建具有私有属性和方法的对象。它可以帮助我们更好地组织代码,并提高代码的可维护性。