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代码
Oct 09 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
Apr 20 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
Feb 16 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
jQuery背景插件backstretch使用指南
Apr 21 Javascript
jQuery中通过ajax的get()函数读取页面的方法
Feb 29 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
Dec 08 Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
Mar 22 Javascript
JS倒计时两种实现方式代码实例
Jul 27 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 图片加水印与上传图片加水印php类
2010/05/12 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
浅谈php中mysql与mysqli的区别分析
2013/06/10 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
VUE 自定义组件模板的方法详解
2019/08/30 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
Python 中迭代器与生成器实例详解
2017/03/29 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Python Django搭建网站流程图解
2020/06/13 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
幼儿教师工作感言
2014/02/14 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
德劲DE1108畅想
2021/04/22 无线电
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers