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