模块模式

2020-11-25  本文已影响0人  ticktackkk

模块模式

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

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
上一篇下一篇

猜你喜欢

热点阅读