• 模块模式浅析


    function aa (a){
    	function bb(){
    		console.log(a)
    	}
    }
    var cc = aa('xiao')
    cc.bb();
    

    上述代码会报错,因为不可以直接通过外部函数调用它的内部函数

    模块模式

    当通过返回一个含有属性引用的对象的方式来将函数传递到词法作用域外部时,我们已经创造了可以观察和实践闭包的条件,内部函数的词法作用域(闭包),也就是foo() 的内部作用域。

    function aa (a){
    	function bb(){
    		console.log(a)
    	}
    	return {
    		bb:bb
    	}
    }
    var cc = aa('xiao')
    cc.bb();
    

    模块模式特点

    1.必须有外部的封闭函数,该函数必须至少被调用一次(每次调用都会创建一个新的模块实例)。
    2.封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或者修改私有的状态。
    3.模块也是普通的函数,并且可以接收参数
    4.模块模式另一个简单但强大的变化用法是,命名将要作为公共API返回的对象

    //单例模式-立即调用这个函数并将返回值直接赋值给单例的模块实例标识符foo
    var foo = (function CoolModule(id){
    	function change(){
    		publicAPI.identify = identify2;
    	}
    	function identify1(){
    		console.log(id);
    	}
    	function identify2(){
    		console.log(id.toUpperCase());
    	}
    	publicAPI = {
    		change:change,
    		identify:identify1
    	}
    	return publicAPI;
    })("foo module");
    
    foo.identify();
    foo.change();
    foo.identify();
    

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

  • 相关阅读:
    Struts2 HelloWorld_1
    Java Web JavaMail 邮件发送
    Struts2 ActionWildcard(通配符配置)约定优于配置
    Struts2 Action
    Struts2 struts2简介
    Struts2 ActionMethod DMI(动态方法调用)
    Java Web Servlet过滤器
    com学习笔记(2)基本的com接口QueryInterface的实现
    com学习笔记(4)动态链接
    silverlight Visifire图表转图片偷天换日的做法
  • 原文地址:https://www.cnblogs.com/lfnumber7/p/12549086.html
Copyright © 2020-2023  润新知