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 相关文章推荐
JavaScript经典效果集锦
Jul 06 Javascript
js字符编码函数区别分析
Dec 28 Javascript
js数组循环遍历数组内所有元素的方法
Jan 18 Javascript
jQuery基础知识小结
Dec 22 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
js学习总结_选项卡封装(实例讲解)
Jul 13 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
Jun 12 jQuery
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
Sep 26 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
DOM下的节点属性和操作小结
2009/05/14 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
JavaScript 的继承
2011/10/01 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
Python实时获取cmd的输出
2015/12/13 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
python实现爬山算法的思路详解
2019/04/09 Python
python写日志文件操作类与应用示例
2019/07/01 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
英国电子专家:maplin
2019/09/04 全球购物
乡镇信息公开实施方案
2014/03/23 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
2014年销售部工作总结
2014/12/01 职场文书
亮剑观后感
2015/06/05 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫