JS设计模式一:单例模式
var single = (function(){
var unique;
function getInstance(){
if( unique === undefined ){
unique = new Construct();
}
return unique;
}
function Construct(){
// ... 生成单例的构造函数的代码
}
return {
getInstance : getInstance
}
})();
实现1: 最简单的对象字面量
var singleton = {
attr : 1,
method : function(){ return this.attr; }
}
var t1 = singleton ;
var t2 = singleton ;
实现2:构造函数内部判断
function Construct(){
// 确保只有单例
if( Construct.unique !== undefined ){
return Construct.unique;
}
// 其他代码
this.name = "NYF";
this.age="24";
Construct.unique = this;
}
var t1 = new Construct() ;
var t2 = new Construct() ;
实现3 : 闭包方式
var single = (function(){
var unique;
function Construct(){
// ... 生成单例的构造函数的代码
}
unique = new Constuct();
return unique;
})();
总结
以下为单例模式实现的 点击规则 效果
/* 查看规则*/
// ************单例模式 **********//
var RuleDialog = (function(){
var cDialog = function(fn){
var str = "<div class='ruleDialog' id='ruleDialog'>" +
"<h4 style='text-align:center;font-size:1rem;'>详细活动规则</h4>" +
"<a href='javascript:' class='closeRuleDialog' id='closeRuleBtn'>×</a>" +
"<div>1、本活动奖品全部由合作伙伴国鑫所提供。<br/>" +
"2、电影票(蜘蛛网兑换码)在微信关注“国鑫所微服务”后一个工作日内以短信形式将兑换验证码发送到所填手机号。<br/>" +
"3、鑫币在微信关注“国鑫所微服务”后一个工作日内自动发放到国鑫所平台账户中。鑫币有效期为30天,请注意及时使用。<br/>" +
"4、实物奖励在微信关注“国鑫所微服务”后联系工作人员后发放。<br/>" +
"5、本次抽奖仅限国鑫所未注册用户参加。<br/>" +
"活动最终解释权归国鑫所所有,如有问题请联系在线客服或拨打400-885-2506" +
"</div>" +
"</div>";
var ruleWin = null;
return function(){
var type = [].shift.call(arguments);
if(type === "show"){
if(!ruleWin) ruleWin = fn(str);
else ruleWin.show();
}
else if(type === "hide") ruleWin.hide();
}
};
return cDialog(function(str){
var dialogWin = $("<div class='dialogWin overlayer' id='ruleDialog'></div>").appendTo("body").html(str);
$("#closeRuleBtn").click(function(){RuleDialog("hide")});
return dialogWin
});
})();
$("#showRuleBtn").click(function(){RuleDialog("show")});
浙公网安备 33010602011771号