返回

用javascript来实现封装对象的秘密

前端

在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

在上面的代码中,privatePropertyprivateMethod 是私有属性和方法,publicPropertypublicMethod 是公共属性和方法。module 对象是暴露模块模式返回的对象,它只暴露了公共属性和方法,私有属性和方法只能在模块内部访问。

模块模式是一种非常强大的设计模式,可以用来创建具有私有属性和方法的对象。它可以帮助我们更好地组织代码,并提高代码的可维护性。