利用js的闭包原理做对象封装及调用方法
创建一个js文件,名为testClosure.js:
(function(){
functiona()
{
alert('iama');
}
outFunc=function(){
a();
}
})();
这里不论写多少个function,abcd...外面都调用不到,包括这里面var定义的变量也都调用不到,那么你在里面尽情的写,就不用担心这些函数名变量名跟外界冲突;
只需要暴露一个outFunc这个函数供外界调用。这个函数呢没有用var定义,就变成一个全局变量,外界就可以调用的到,利用这一点,让这个函数变成匿名函数和外界沟通的桥梁。
再利用js面向对象的方法,就可以封装出非常好用的组件。
示例一:不需要继承的js组件
(function()
{
vararrAuthItem=newArray();
varisInited=false;
varsyncTableObj=findObj("sync-table-id",document);
varnewTR=null;
varcheckBox=null;
varauthTable=null;
varselfPicUrl=null;
varselfItem=null;
varisAuthItemEnabled=false;
varisSelfItemEnabled=false;
functiongetAuthShopCurrent()
{
return$("#"+globalSyncVars.serverComClientId.AuthShopListId).val();
}
functiongetSyncFieldCurrent()
{
return$("#"+globalSyncVars.serverComClientId.SyncFieldListId).val();
}
functionsetTitle()
{
$("#sync-table-title-id").html("从“"+getAuthShopCurrent()+"”同步");
}
functiongetNumIidFrom(numIidTo)
{
varcurRowData=jQuery("#listItemDefine").jqGrid('getRowData',numIidTo);
returncurRowData.NumIidFrom;
}
functioninsertRows()
{
deleteAll();
for(vari=0;i ';
if(getEnabledStatus(isBinded,!isSharedTo,isSelfItemEnabled))
isEnabled=true;
strTr+=''+getRadioCode(isBinded,!isSharedTo,isSelfItemEnabled,i,arr.length)+''+picUrl+''+getAuthItemCode(arr[p],isSharedFrom,isSharedTo,i)+''+getEnabledCode(isBinded,!isSharedTo,isSelfItemEnabled,arr[p],numIid)+' ';
}
authTable.innerHTML=strHead+strTr+'';
returnisEnabled;
}
//返回auth宝贝详情html代码
functiongetAuthItemCode(obj,isSharedFrom,isSharedTo,i)
{
varlabelStr="";
if(isSharedFrom)labelStr='【源】';
if(isSharedTo)labelStr='【受】';
return''+labelStr+'ID:'+obj["NumIid"]+''
+'商家编码:'+obj["OuterId"]+''
+'价格:'+obj["Price"]+''
+'
'+obj["Title"]+'';
}
//返回self宝贝详情html代码
functiongetSelfItemCode(obj)
{
varlabelStr="";
if(stringToBoolean(obj["IsToItemHasShareFrom"]))labelStr='【源】';
if(stringToBoolean(obj["IsToItemHasShareTo"]))labelStr='【受】';
return''+labelStr+'ID:'+obj["NumIidTo"]+''
+'商家编码:'+obj["OuterIdTo"]+''
+'价格:'+obj["PriceTo"]+''
+'
'+obj["TitleTo"]+'';
}
//返回绑定关系图标的html代码
functiongetEnabledCode(isBinded,isAuthEnabled,isSelfEnabled,obj,numIid)
{
if(isBinded)
{
//如果是绑定状态,还要看当前item是否为绑定的item
//在这种情况下,判断是否可绑定,不需要用到selfItem
if(obj["NumIid"]==numIid)
return' ';
else
{
if(stringToBoolean(obj["IsFromItemHasShareTo"]))
return' ';
else
return' ';
}
}else
{
if(isAuthEnabled&&isSelfEnabled)
return' ';
else
return' ';
}
}
//是否可以绑定
functiongetEnabledStatus(isBinded,isAuthEnabled,isSelfEnabled)
{
if(isBinded)returnfalse;
if(isAuthEnabled&&isSelfEnabled)
{
returntrue;
}
else
{
returnfalse;
}
}
//返回radio的html代码
/**
*isBinded是否已经绑定
*isAuthEnabledauth是否可同步
*isSelfEnabledself是否可同步
*当前rows的index
*当前auth-list的长度(如果是一对一,当然不需要radio)
*/
functiongetRadioCode(isBinded,isAuthEnabled,isSelfEnabled,i,length)
{
if(isBinded)return"";
if(length==1)return"";
if(isAuthEnabled==false||isSelfEnabled==false)return"";
return'';
}
functionsetterSelfItem(i)
{
varisEnabled=true;
varpicUrl=' ';
selfPicUrl.innerHTML=picUrl;
selfItem.innerHTML=getSelfItemCode(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]);
if(stringToBoolean(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["IsToItemHasShareFrom"]))isEnabled=false;
if(stringToBoolean(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["IsToItemHasShareTo"]))isEnabled=false;
returnisEnabled;
}
functiongetPriceColor(price,i)
{
if(arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["PriceTo"]==undefined)return"black";
if(price==undefined)return"black";
return(price==arrAuthItem[getAuthShopCurrent()+getSyncFieldCurrent()+""][i]["PriceTo"])?"black":"red";
}
functionsetterEnableStatus(isEnabled,i)
{
if(isEnabled)
checkBox.innerHTML=' ';
else
checkBox.innerHTML=' ';
}
functionstringToBoolean(str)
{
if(str==undefined)returnfalse;
switch(str.toLowerCase())
{
case"true":case"yes":case"1":returntrue;
case"false":case"no":case"0":casenull:returnfalse;
default:returnBoolean(str);
}
}
functiondeleteAll()
{
for(vari=syncTableObj.rows.length-1;i>2;i--)
{
syncTableObj.deleteRow(i);
}
}
functionselectAll(isSelect)
{
if(isSelect)
{
$(".enableCheckbox").prop("checked",true);
}else
{
$(".enableCheckbox").prop("checked",false);
}
}
functionfindObj(theObj,theDoc)
{
varp,i,foundObj;
if(!theDoc)theDoc=document;
if((p=theObj.indexOf("?"))>0&&parent.frames.length)
{
theDoc=parent.frames[theObj.substring(p+1)].document;
theObj=theObj.substring(0,p);
}
if(!(foundObj=theDoc[theObj])&&theDoc.all)
foundObj=theDoc.all[theObj];
for(i=0;!foundObj&&i
示例二:有继承关系的js组件
(function(){
//____________________________批量修改的基类_________________________________
functionBatchModify(){}
//选择了什么id
BatchModify.prototype.numIids=null;
BatchModify.prototype.addis=null;
BatchModify.prototype.oneIid=null;
BatchModify.prototype.skuIds=null;
BatchModify.prototype.selectedItemData=null;
BatchModify.prototype.maxHeightVal=$(window).height()*0.9;
//完全克隆一个数组
BatchModify.prototype.cloneArr=function(arr)
{
vararrNew=[];
for(vari=0;i=0?this.title.substring(4):this.title],
colModel:[
{name:'PicUrl',index:'PicUrl',width:60,align:"center",sortable:false,formatter:imgFormatter,unformat:imgUnFormat},
{name:'Title',index:'OuterId',width:430,sortable:true,formatter:itemDescFormatter,unformat:itemDescUnFormat},
{name:'NumIid',index:'NumIid',width:100,hidden:true,key:true},
{name:'Price',index:'Price',width:100,hidden:true},
{name:'OuterId',index:'OuterId',width:100,hidden:true},
{name:this.fieldName,index:this.fieldName,width:440,sortable:true,hidden:false,formatter:this.formatter}
]
});
};
//把表格填充进数据
BatchMsgModify.prototype.initTable=function()
{
vargridArrayData=[];
for(vari=0;i"+rowdata[currentInstance.fieldName]+"";
};
//重写post函数
BatchMsgModify.prototype.postData=function(urledit,sender)
{
$.post(urledit,$("#"+globalVars.serverComClientId.formAldsItemDefine1).serialize())
.done(function(myJsonResult)
{
vardata=$.evalJSON(myJsonResult);
ajaxResponseResult(data);
if(data.IsSuccess){
if(!data.rows)
showPrompt(currentInstance.title+"成功"+currentInstance.numIids.length+"个!");
$("#listItemDefine").trigger('reloadGrid');
setTimeout(function(){$(sender).dialog("close");},0);
setTimeout(function(){$(sender).dialog("destroy");},1000);
}
if(data.ErrMsg&&$.trim(data.ErrMsg)!="")
alert(currentInstance.title+"出错:\n\n"+data.ErrMsg);
})
.fail(function(data){
ajaxResponseResult(data);
})
.always(function(myJsonResult){
});
};
//确认按钮的回调函数
BatchMsgModify.prototype.confirmCallback=function(sender)
{
this.setAddis();
this.setNumIidsToCom();
this.setAddisToCom();
this.postData(this.editUrl+"&rdm="+Math.random(),sender);
};
//实例
varbatchAddi=null;
varbatchMsgTradeSuccess=null;
varbatchMsgRatedGood=null;
varcurrentInstance=null;//指向当前对象,当this指向失效的时候可以使用这个
openBatchMsgDialogType={batchAddi:0,batchMsgTradeSuccess:1,batchMsgRatedGood:2};
openBatchMsgDialog=function(typeCode)
{
if(typeCode==openBatchMsgDialogType.batchAddi)
{
if(batchAddi==null)
batchAddi=newBatchMsgModify("批量修改附言","tableEditContent","tablePaper","Additional","x.aspx?method=UpdateMsgAdditional","