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 相关文章推荐
用window.location.href实现刷新另个框架页面
Mar 07 Javascript
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
jQuery学习笔记 更改jQuery对象
Sep 19 Javascript
利用JS实现浏览器的title闪烁
Jul 08 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
Jan 08 Javascript
Angular模版驱动表单的使用总结
May 05 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
JavaScript实现拖拽功能
Feb 11 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
咖啡的传说和历史
2021/03/03 新手入门
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
JavaScript 异步调用
2017/10/25 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
Python中列表元素转为数字的方法分析
2016/06/14 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)
2019/08/12 Python
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
工商企业管理应届生求职信
2014/05/04 职场文书
银行奉献演讲稿
2014/09/16 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL