JS扩展方法实例分析
本文实例讲述了JS扩展方法实现技巧。分享给大家供大家参考。具体分析如下:
JS扩展方法与C#的扩展方法非常相似,也是可以链式调用的,也是通过对某个类的扩展写法来实现。这个东西非常好用,如果将预先写好的方法放到一个js里面引用的话,那么后面写js将非常有趣。
下面给出一个例子:
<head> <title>测试JS扩展方法</title> <scripttype="text/javascript"> //合并多个空白为一个空白 String.prototype.ResetBlank=function(){//对字符串扩展 varregEx=/\s+/g; returnthis.replace(regEx,''); }; window.onload=function() { varstr="你在他想还好吗?"; alert(str); str=str.ResetBlank();//这样就能够调用了,跟C#的很像吧! alert(str); } </script> </head>
好像只是告诉自己有这样一个东西而已;
下面给出找到的一个非常不错的js扩展:
//清除两边的空格 String.prototype.trim=function(){ returnthis.replace(/(^\s*)|(\s*$)/g,''); }; //合并多个空白为一个空白 String.prototype.ResetBlank=function(){ varregEx=/\s+/g; returnthis.replace(regEx,''); }; //保留数字 String.prototype.GetNum=function(){ varregEx=/[^\d]/g; returnthis.replace(regEx,''); }; //保留中文 String.prototype.GetCN=function(){ varregEx=/[^\u4e00-\u9fa5\uf900-\ufa2d]/g; returnthis.replace(regEx,''); }; //String转化为Number String.prototype.ToInt=function(){ returnisNaN(parseInt(this))?this.toString():parseInt(this); }; //得到字节长度 String.prototype.GetLen=function(){ varregEx=/^[\u4e00-\u9fa5\uf900-\ufa2d]+$/; if(regEx.test(this)){ returnthis.length*2; }else{ varoMatches=this.match(/[\x00-\xff]/g); varoLength=this.length*2-oMatches.length; returnoLength; } }; //获取文件全名 String.prototype.GetFileName=function(){ varregEx=/^.*\/([^\/\?]*).*$/; returnthis.replace(regEx,'$1'); }; //获取文件扩展名 String.prototype.GetExtensionName=function(){ varregEx=/^.*\/[^\/]*(\.[^\.\?]*).*$/; returnthis.replace(regEx,'$1'); }; //替换所有 String.prototype.replaceAll=function(reallyDo,replaceWith,ignoreCase) { if(!RegExp.prototype.isPrototypeOf(reallyDo)){ returnthis.replace(newRegExp(reallyDo,(ignoreCase?"gi":"g")),replaceWith); }else{ returnthis.replace(reallyDo,replaceWith); } }; //格式化字符串addBy刘景宁2010-12-09 String.Format=function(){ if(arguments.length==0){ return''; } if(arguments.length==1){ returnarguments[0]; } varreg=/{(\d+)?}/g; varargs=arguments; varresult=arguments[0].replace(reg,function($0,$1){ returnargs[parseInt($1)+1]; }); returnresult; }; //数字补零 Number.prototype.LenWithZero=function(oCount){ varstrText=this.toString(); while(strText.length<oCount){ strText='0'+strText; } returnstrText; }; //Unicode还原 Number.prototype.ChrW=function(){ returnString.fromCharCode(this); }; //数字数组由小到大排序 Array.prototype.Min2Max=function(){ varoValue; for(vari=0;i<this.length;i++){ for(varj=0;j<=i;j++){ if(this[i]<this[j]){ oValue=this[i]; this[i]=this[j]; this[j]=oValue; } } } returnthis; }; //数字数组由大到小排序 Array.prototype.Max2Min=function(){ varoValue; for(vari=0;i<this.length;i++){ for(varj=0;j<=i;j++){ if(this[i]>this[j]){ oValue=this[i]; this[i]=this[j]; this[j]=oValue; } } } returnthis; }; //获得数字数组中最大项 Array.prototype.GetMax=function(){ varoValue=0; for(vari=0;i<this.length;i++){ if(this[i]>oValue){ oValue=this[i]; } } returnoValue; }; //获得数字数组中最小项 Array.prototype.GetMin=function(){ varoValue=0; for(vari=0;i<this.length;i++){ if(this[i]<oValue){ oValue=this[i]; } } returnoValue; }; //获取当前时间的中文形式 Date.prototype.GetCNDate=function(){ varoDateText=''; oDateText+=this.getFullYear().LenWithZero(4)+newNumber(24180).ChrW(); oDateText+=this.getMonth().LenWithZero(2)+newNumber(26376).ChrW(); oDateText+=this.getDate().LenWithZero(2)+newNumber(26085).ChrW(); oDateText+=this.getHours().LenWithZero(2)+newNumber(26102).ChrW(); oDateText+=this.getMinutes().LenWithZero(2)+newNumber(20998).ChrW(); oDateText+=this.getSeconds().LenWithZero(2)+newNumber(31186).ChrW(); oDateText+=newNumber(32).ChrW()+newNumber(32).ChrW()+newNumber(26143).ChrW()+newNumber(26399).ChrW()+newString('26085199682010819977222352011620845').substr(this.getDay()*5,5).ToInt().ChrW(); returnoDateText; }; //扩展Date格式化 Date.prototype.Format=function(format){ varo={ "M+":this.getMonth()+1,//月份 "d+":this.getDate(),//日 "h+":this.getHours()%12==0?12:this.getHours()%12,//小时 "H+":this.getHours(),//小时 "m+":this.getMinutes(),//分 "s+":this.getSeconds(),//秒 "q+":Math.floor((this.getMonth()+3)/3),//季度 "S":this.getMilliseconds()//毫秒 }; varweek={ "0":"\u65e5", "1":"\u4e00", "2":"\u4e8c", "3":"\u4e09", "4":"\u56db", "5":"\u4e94", "6":"\u516d" }; if(/(y+)/.test(format)){ format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length)); } if(/(E+)/.test(format)){ format=format.replace(RegExp.$1,((RegExp.$1.length>1)?(RegExp.$1.length>2?"\u661f\u671f":"\u5468"):"")+week[this.getDay()+""]); } for(varkino){ if(newRegExp("("+k+")").test(format)){ format=format.replace(RegExp.$1,(RegExp.$1.length==1)?(o[k]):(("00"+o[k]).substr((""+o[k]).length))); } } returnformat; } Date.prototype.Diff=function(interval,objDate){ //若参数不足或objDate不是日期类型則回传undefined if(arguments.length<2||objDate.constructor!=Date){returnundefined;} switch(interval){ //计算秒差 case's':returnparseInt((objDate-this)/1000); //计算分差 case'n':returnparseInt((objDate-this)/60000); //计算時差 case'h':returnparseInt((objDate-this)/3600000); //计算日差 case'd':returnparseInt((objDate-this)/86400000); //计算周差 case'w':returnparseInt((objDate-this)/(86400000*7)); //计算月差 case'm':return(objDate.getMonth()+1)+((objDate.getFullYear()-this.getFullYear())*12)-(this.getMonth()+1); //计算年差 case'y':returnobjDate.getFullYear()-this.getFullYear(); //输入有误 default:returnundefined; } }; //检测是否为空 Object.prototype.IsNullOrEmpty=function(){ varobj=this; varflag=false; if(obj==null||obj==undefined||typeof(obj)=='undefined'||obj==''){ flag=true; }elseif(typeof(obj)=='string'){ obj=obj.trim(); if(obj==''){//为空 flag=true; }else{//不为空 obj=obj.toUpperCase(); if(obj=='NULL'||obj=='UNDEFINED'||obj=='{}'){ flag=true; } } } else{ flag=false; } returnflag;
希望本文所述对大家的javascript程序设计有所帮助。