• 作用域闭包:模块模式


     模块模式需要具备两个必要条件
     1.必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)
     2.封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或则和修改私有状态
    一个具有函数属性的对象本身并不是真正的模块.从方便观察的角度看,一个从函数所返回的,只有数据属性而没有闭包函数的对象并不是真正的模块
    function CoolModule(){
      var something = "cool";
      var another = [1,2,3];
      function doSomething(){
        console.log(something);
      }
      function doAnother(){
        console.log(another.join("!"));
      }
      return{
        doSomething:doSomething,
        doAnother:doAnother
      }
    }
    var foo = CoolModule();
    foo.doSomething(); //cool
    foo.doAnother() //1!2!3

      这个模式在JavaScript中被称为模块.最澄减的实现魔窟开模式的方法通常被称为模块暴露,这里展示的是其变体,模块模式另一个简单但强大的变化用法是,命名将要作为公共API返回的对象:

    var foo = (function CoolModule(id){
        function change(){
          // 修改公共API
          publicAPI.identify = identify2
        }
        function identify1(){
          console.log(id);
        }
        function identify2(){
          console.log(id.toUpperCase());
        }
        var publicAPI = {
          change:change,
          identify:identify1
        }
        return publicAPI;
    })("foo Module");
    
    foo.identify()   //foo Module
    foo.change()
    foo.identify()   //FOO MODULE

      通过在模块实例的内部保留对公共API对象的内部引用,可以从内部对模块实例进行修改,包括添加或删除方法和属性,以及修改它们的值

  • 相关阅读:
    rabbitmq级联之shovel插件和exchange.bind
    gcc常用编译选项
    windows下rabbitmq-c编译(带openssl、无需MinGW)
    windows下openssl编译
    关于actor模型
    mysql优化之使用iotop+pt-ioprofile定位具体top io文件
    centos6下jbd2进程占用大量IO处理
    c++中的header-only library
    java中线程的停止以及LockSupport工具类
    java Condition条件变量的通俗易懂解释、基本使用及注意点
  • 原文地址:https://www.cnblogs.com/chorkiu/p/12132858.html
Copyright © 2020-2023  润新知