美文网首页
模块模式

模块模式

作者: ticktackkk | 来源:发表于2020-11-25 16:26 被阅读0次

    模块模式

    模块 模式实在单例对象上加上扩展,通过作用域链来关联私有变量和特权方法
    对象字面量封装模块,闭包实现私有和公有。它提供了一种包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域。为我们提供了一个屏蔽处理底层事件逻辑的整洁解决方案,同时只暴露一个接口供其他部分使用。该模式的特点是返回一个对象而不是一个函数,除此之外非常类似一个立即调用的函数表达式。

    var myGirlfriend = (function() {
                let name ='baby'
                let _smile = ()=>{
                    console.log('smile');
                }
                let _kiss =()=>{
                    console.log('kiss');
                }
                return {
                    name:name,
                    smile:_smile
                }
            })()
          console.log(myGirlfriend.name);//baby
          myGirlfriend.smile()//smile
          console.log(myGirlfriend.kiss);//undefind
    

    简而言之,经过我的同意,你可以知道我女朋友的名字,可以看我女朋友的微笑,但你不可以吻她

    增强模块模式

    适合那些单列必须是某种类型的实例,同时还必须添加某些属性或方法对其加以增强的情况。

    function CustomType() {
        this.name = "GaoSir";
    };
    CustomType.prototype.getName = function(){
        return this.name;
    }
    var application = (function(){
        // 定义私有
        var privateA = "privateA";
        // 定义私有函数
        function privateMethodA(){};
    
        // 实例化一个对象后,返回该实例,然后为该实例增加一些公有属性和方法
        var object = new CustomType();
    
        // 添加公有属性
        object.publicA = "publicA";
        // 添加公有方法
        object.publicB = function(){
            return privateA;
        }
        // 返回该对象
        return object;
    })();
    
    console.log(application.publicA);// publicA
    
    console.log(application.publicB()); // privateA
    
    console.log(application.name); // GaoSir
    
    console.log(application.getName());// GaoSir
    

    相关文章

      网友评论

          本文标题:模块模式

          本文链接:https://www.haomeiwen.com/subject/mseniktx.html