JS扩展方法实例分析


Posted in Javascript onApril 15, 2015

本文实例讲述了JS扩展方法实现技巧。分享给大家供大家参考。具体分析如下:

JS扩展方法与C#的扩展方法非常相似,也是可以链式调用的,也是通过对某个类的扩展写法来实现。这个东西非常好用,如果将预先写好的方法放到一个js里面引用的话,那么后面写js将非常有趣。

下面给出一个例子:

<head>
  <title>测试JS扩展方法</title>
  <script type="text/javascript">
   // 合并多个空白为一个空白 
   String.prototype.ResetBlank = function() { //对字符串扩展
   var regEx = /\s+/g; 
   return this.replace(regEx, ' '); 
   }; 
   window.onload = function()
   {
   var str = "你  在他想还好吗?";
   alert(str);
   str = str.ResetBlank(); //这样就能够调用了,跟C#的很像吧!
   alert(str);
   }
  </script>
</head>

好像只是告诉自己有这样一个东西而已;

下面给出找到的一个非常不错的js扩展:

// 清除两边的空格 
String.prototype.trim = function() { 
  return this.replace(/(^\s*)|(\s*$)/g, ''); 
}; 
// 合并多个空白为一个空白 
String.prototype.ResetBlank = function() { 
  var regEx = /\s+/g; 
  return this.replace(regEx, ' '); 
}; 
 
// 保留数字 
String.prototype.GetNum = function() { 
  var regEx = /[^\d]/g; 
  return this.replace(regEx, ''); 
}; 
 
// 保留中文 
String.prototype.GetCN = function() { 
  var regEx = /[^\u4e00-\u9fa5\uf900-\ufa2d]/g; 
  return this.replace(regEx, ''); 
}; 
 
// String转化为Number 
String.prototype.ToInt = function() { 
  return isNaN(parseInt(this)) ? this.toString() : parseInt(this); 
}; 
 
// 得到字节长度 
String.prototype.GetLen = function() { 
  var regEx = /^[\u4e00-\u9fa5\uf900-\ufa2d]+$/; 
  if (regEx.test(this)) { 
   return this.length * 2; 
  } else { 
   var oMatches = this.match(/[\x00-\xff]/g); 
   var oLength = this.length * 2 - oMatches.length; 
   return oLength; 
  } 
}; 
 
// 获取文件全名 
String.prototype.GetFileName = function() { 
  var regEx = /^.*\/([^\/\?]*).*$/; 
  return this.replace(regEx, '$1'); 
}; 
 
// 获取文件扩展名 
String.prototype.GetExtensionName = function() { 
  var regEx = /^.*\/[^\/]*(\.[^\.\?]*).*$/; 
  return this.replace(regEx, '$1'); 
}; 
 
//替换所有
String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) 
{ 
  if (!RegExp.prototype.isPrototypeOf(reallyDo)) { 
   return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi" : "g")), replaceWith); 
  } else { 
   return this.replace(reallyDo, replaceWith); 
  } 
}; 
//格式化字符串 add By 刘景宁 2010-12-09  
String.Format = function() { 
  if (arguments.length == 0) { 
   return ''; 
  } 
 
  if (arguments.length == 1) { 
   return arguments[0]; 
  } 
 
  var reg = /{(\d+)?}/g; 
  var args = arguments; 
  var result = arguments[0].replace(reg, function($0, $1) { 
   return args[parseInt($1) + 1]; 
  }); 
  return result; 
}; 
 
// 数字补零 
Number.prototype.LenWithZero = function(oCount) { 
  var strText = this.toString(); 
  while (strText.length < oCount) { 
   strText = '0' + strText; 
  } 
  return strText; 
}; 
 
// Unicode还原 
Number.prototype.ChrW = function() { 
  return String.fromCharCode(this); 
}; 
 
// 数字数组由小到大排序 
Array.prototype.Min2Max = function() { 
  var oValue; 
  for (var i = 0; i < this.length; i++) { 
   for (var j = 0; j <= i; j++) { 
   if (this[i] < this[j]) { 
    oValue = this[i]; 
    this[i] = this[j]; 
    this[j] = oValue; 
   } 
   } 
  } 
  return this; 
}; 
 
// 数字数组由大到小排序 
Array.prototype.Max2Min = function() { 
  var oValue; 
  for (var i = 0; i < this.length; i++) { 
   for (var j = 0; j <= i; j++) { 
   if (this[i] > this[j]) { 
    oValue = this[i]; 
    this[i] = this[j]; 
    this[j] = oValue; 
   } 
   } 
  } 
  return this; 
}; 
 
// 获得数字数组中最大项 
Array.prototype.GetMax = function() { 
  var oValue = 0; 
  for (var i = 0; i < this.length; i++) { 
   if (this[i] > oValue) { 
   oValue = this[i]; 
   } 
  } 
  return oValue; 
}; 
 
// 获得数字数组中最小项 
Array.prototype.GetMin = function() { 
  var oValue = 0; 
  for (var i = 0; i < this.length; i++) { 
   if (this[i] < oValue) { 
   oValue = this[i]; 
   } 
  } 
  return oValue; 
}; 
 
// 获取当前时间的中文形式 
Date.prototype.GetCNDate = function() { 
  var oDateText = ''; 
  oDateText += this.getFullYear().LenWithZero(4) + new Number(24180).ChrW(); 
  oDateText += this.getMonth().LenWithZero(2) + new Number(26376).ChrW(); 
  oDateText += this.getDate().LenWithZero(2) + new Number(26085).ChrW(); 
  oDateText += this.getHours().LenWithZero(2) + new Number(26102).ChrW(); 
  oDateText += this.getMinutes().LenWithZero(2) + new Number(20998).ChrW(); 
  oDateText += this.getSeconds().LenWithZero(2) + new Number(31186).ChrW(); 
  oDateText += new Number(32).ChrW() + new Number(32).ChrW() + new Number(26143).ChrW() + new Number(26399).ChrW() + new String('26085199682010819977222352011620845').substr(this.getDay() * 5, 5).ToInt().ChrW(); 
  return oDateText; 
}; 
//扩展Date格式化 
Date.prototype.Format = function(format) { 
  var o = { 
   "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() //毫秒   
  }; 
  var week = { 
   "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 (var k in o) { 
   if (new RegExp("(" + k + ")").test(format)) { 
   format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 
   } 
  } 
  return format; 
} 
Date.prototype.Diff = function(interval, objDate) { 
  //若参数不足或 objDate 不是日期类型?t回传 undefined 
  if (arguments.length < 2 || objDate.constructor != Date) { return undefined; } 
  switch (interval) { 
   //计算秒差             
   case 's': return parseInt((objDate - this) / 1000); 
   //计算分差 
   case 'n': return parseInt((objDate - this) / 60000); 
   //计算?r差 
   case 'h': return parseInt((objDate - this) / 3600000); 
   //计算日差 
   case 'd': return parseInt((objDate - this) / 86400000); 
   //计算周差 
   case 'w': return parseInt((objDate - this) / (86400000 * 7)); 
   //计算月差 
   case 'm': return (objDate.getMonth() + 1) + ((objDate.getFullYear() - this.getFullYear()) * 12) - (this.getMonth() + 1); 
   //计算年差 
   case 'y': return objDate.getFullYear() - this.getFullYear(); 
   //输入有误 
   default: return undefined; 
  } 
}; 
 
//检测是否为空 
Object.prototype.IsNullOrEmpty = function() { 
var obj = this; 
var flag = false; 
if (obj == null || obj == undefined || typeof (obj) == 'undefined' || obj == '') { 
   flag = true; 
} else if (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; 
} 
return flag;

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
用dom+xhtml+css制作的一个相册效果代码打包下载
Jan 24 Javascript
javascript 表单验证常见正则
Sep 28 Javascript
JavaScript经典效果集锦
Jul 06 Javascript
基于jQuery的为attr添加id title等效果的实现代码
Apr 20 Javascript
js获取鼠标点击的位置实现思路及代码
May 09 Javascript
21个JavaScript事件(Events)属性汇总
Dec 02 Javascript
jQuery.extend 函数及用法详细
Sep 06 Javascript
JavaScript操作选择对象的简单实例
May 16 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
js图片放大镜实例讲解(必看篇)
Jul 17 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
Oct 30 Javascript
微信小程序select下拉框实现效果
May 15 Javascript
JavaScript实现简单的二级导航菜单实例
Apr 15 #Javascript
JQuery radio(单选按钮)操作方法汇总
Apr 15 #Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 #Javascript
JQuery控制radio选中和不选中方法总结
Apr 15 #Javascript
jquery插件star-rating.js实现星级评分特效
Apr 15 #Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
Apr 15 #Javascript
jQuery实现首页顶部可伸缩广告特效代码
Apr 15 #Javascript
You might like
遭遇php的in_array低性能问题
2013/09/17 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[15:07]lgd_OG_m2_BP
2019/09/10 DOTA
[01:44]Ti10举办地公布
2019/08/25 DOTA
python3.3实现乘法表示例
2014/02/07 Python
python实现多线程抓取知乎用户
2016/12/12 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
python框架django项目部署相关知识详解
2019/11/04 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
pandas 数据类型转换的实现
2020/12/29 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
vue项目实现分页效果
2021/03/24 Vue.js
营销与策划个人求职信
2013/09/22 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
父母对孩子说的话
2014/04/12 职场文书
企业承诺书格式
2014/05/21 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
教师党员整改措施
2014/10/24 职场文书
《小小的船》教学反思
2016/02/18 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL