js实现prototype扩展的方法(字符串,日期,数组扩展)


Posted in Javascript onJanuary 14, 2016

本文实例讲述了js实现prototype扩展的方法。分享给大家供大家参考,具体如下:

String.prototype.isEmpty = function () { return !(/.?[^/s ]+/.test(this)); } //检测字符串是否为空
// 替换字符
String.prototype.reserve = function(type) {
 if (type == 'int') return this.replace(/^/d/g, ''); // 替换字符串中除了数字以外的所有字符
 else if (type == 'en') return this.replace(/[^A-Za-z]/g, ''); // 替换字符串中除了英文以外的所有字符
 else if (type == 'cn') return this.replace(/[^/u4e00-/u9fa5/uf900-/ufa2d]/g, ''); // 替换字符串中除了中文以外的所有字符
 else return this;
}
// 字符串反转
String.prototype.reverse = function() {
 return this.split('').reverse().join('');
}
// 以一个中文算两个字符长度计算字符串的长度
String.prototype.cnLength = function() { return this.replace(/[^/x00-/xff]/g, ' * * ' ).length; }
// 替换字符串中的空格
String.prototype.trim = function(type, char) {
 var type = type ? type.toUpperCase() : '';
 switch (type) {
  case 'B' : // 替换所有欲清除字符,未定义char则默认为替换空格
   return this.replace(char ? new RegExp(char, 'g') : /(/s+| )/g, '');
  case 'O' : // 将两个以上的连续欲清除字符替换为一个,未定义char则默认为替换空格
   return char ? this.replace(new RegExp(char + '{2,}', 'g'), char) : this.replace(/[/s ]{2,}/g, ' ');
  case 'L' : // 替换除左边欲清除字符,未定义char则默认为替换空格
   return this.replace(char ? new RegExp('^(' + char + ') * ', 'g') : /^(/s| ) * /g, '');
  case 'R' : // 替换除右边欲清除字符,未定义char则默认为替换空格
   return this.replace(char ? new RegExp('(' + char + ') * $', 'g') : /(/s| ) * $/g, '');
  default : // 替换除左右两边欲清除字符,未定义char则默认为替换空格
   return this.replace(char ? new RegExp('^(' + char + ') * |(' + char + ') * $', 'g') : /(^/s * | )|( |/s * $)/g, '');
 }
}
// 判断字符串是否是数字
String.prototype.isNumer = function(flag) {
 if (isNaN(this)) {return false;}
 switch (flag) {
  case '+' : return /(^/+?|^/d?)/d * /.?/d+$/.test(this); // 正数
  case '-' : return /^-/d * /.?/d+$/.test(this); // 负数
  case 'i' : return /(^-?|^/+?|/d)/d+$/.test(this); // 整数
  case '+i' : return /(^/d+$)|(^/+?/d+$)/.test(this); // 正整数
  case '-i' : return /^-/d+$/.test(this); // 负整数
  case 'f' : return /(^-?|^/+?|^/d?)/d * /./d+$/.test(this); // 浮点数
  case '+f' : return /(^/+?|^/d?)/d * /./d+$/.test(this); // 正浮点数
  case '-f' : return /^-/d * /./d$/.test(this); // 负浮点数
  default : return true; // 缺省
 }
}
// 仿PHP的str_pad
String.prototype.pad = function (input, length, type) {
 if (!input) return this;
 if (!length || length < 1) var length = 1;
 var input = Array(length + 1).join(input), value;
 var type = type ? type.toUpperCase() : '';
 switch (type) {
  case 'LEFT' : return input + this;
  case 'BOTH' : return input + this + input;
  default : return this + input;
 }
}
// 获取url对应参数的值
String.prototype.getQuery = function(name) {
 var reg = new RegExp('(^|&)' + name + ' = ([^&] * )(&|$)');
 var r = this.substr(this.indexOf('/?') + 1).match(reg);
 return r[2]?unescape(r[2]) : null;
}
// 判断是否是日期格式(YYYY-MM-DD YYYY/MM/DD YYYY.MM.DD)
String.prototype.isDate = function() {
 result = this.match(/^(/d{1, 4})(-|//|.)(/d{1, 2})/2(/d{1, 2})$/);
 if (!result) return false;
 var d = new Date(result[1], result[3]-1, result[4])
 var str = d.getFullYear() + result[2] + (d.getMonth() + 1) + result[2] + d.getDate();
 return this == str;
}
// 将字符串转为日期
String.prototype.toDate = function() {
 var mDate = new Date(Date.parse(str));
 if (isNaN(mDate)) {
  var arr = this.split('-');
  mDate = new Date(arr[0], arr[1], arr[2]);
 }
 return mDate;
}
// 格式化日期, new Date().format('yyyy/mm/dd')
Date.prototype.format = function(format) {
 var format = format.toLowerCase();
 var type = {
  'm+' : this.getMonth()+1,
  'd+' : this.getDate(),
  'h+' : this.getHours(),
  'i+' : this.getMinutes(),
  's+' : this.getSeconds(),
  'q+' : Math.floor((this.getMonth()+3)/3),
  'ms' : this.getMilliseconds()
 }
 if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
 for(var k in type) {
  if(new RegExp('('+ k +')').test(format)) {
   format = format.replace(RegExp.$1, RegExp.$1.length==1 ? type[k] : ('00'+ type[k]).substr((''+ type[k]).length));
  }
 }
 return format;
}
// 添加日期,对应参数分别是:类型(y-年, q-季, m-月, w-周, d-日, h-时, i-分, s-秒)和增加的值
Date.prototype.addDate = function(type, num) {
 var type = type.toLowerCase();
 switch (type) {
  case 's' : return new Date.parse(Date.parse(this) + (1000 * num));
  case 'i' : return new Date.parse(Date.parse(this) + (60000 * num));
  case 'h' : return new Date(Date.parse(this) + (3600000 * num));
  case 'd' : return new Date(Date.parse(this) + (86400000 * num));
  case 'w' : return new Date(Date.parse(this) + ((86400000 * 7) * num));
  case 'm' : return new Date(this.getFullYear(), (this.getMonth()) + num, this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());
  case 'q' : return new Date(this.getFullYear(), (this.getMonth()) + num * 3, this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());
  case 'y' : return new Date((this.getFullYear() + num), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());
 }
}
// 计算两个日期
Date.prototype.dateDiff = function(type, date) {
 if (typeof date == 'string') date = date.toDate();
 switch (type) {
  case 's' : return parseInt((date - this) / 1000);
  case 'i' : return parseInt((date - this) / 60000);
  case 'h' : return parseInt((date - this) / 3600000);
  case 'd' : return parseInt((date - this) / 86400000);
  case 'w' : return parseInt((date - this) / (86400000 * 7));
  case 'm' : return (date.getMonth() + 1) + ((date.getFullYear() - this.getFullYear()) * 12) - (this.getMonth() + 1);
  case 'y' : return date.getFullYear() - this.getFullYear();
 }
}
// 判断对象是否是数组
Object.prototype.isArray = function() {return Object.prototype.toString.apply(this) == '[object Array]';}
// 判断数组内是否存在指定的元素
Array.prototype.inArray = function (value) {
 if (this.length < 2) return this[0] == value;
 this.sort(function(a) {
  return new RegExp('^' + value).test(a) ? -1 : 1;
 });
 return this[0] == value;
}
// 在数组中查找元素并返回第一次出现的位置索引,未找到则返回-1。
Array.prototype.indexOf = function(string) {
 var len = this.length, i = 0;
 if (len < 2) return this[0] == value ? 0 : -1;
 for (i; i < len; i++) {
  if (this[i] == string) return i;
 }
 return -1;
}
// [1, 2, 3].each(function(x) {return x+1}) 得到2, 3, 4
Array.prototype.each = function(c) {
 var ret = [];
 for(var i = 0; i < this.length; i++) {
  ret.push(c(this[i]));
 }
 return ret;
}
// [1, -1, 2].any(function(x) {return x < 0}) 判断是否数组中有一个元素小于0
Array.prototype.any = function(c) {
 for(var i = 0; i < this.length; i++) {
  if (c(this)) return true;
 }
 return false;
}
// [1, 2, 3].all(function(x) {return x > 0}) 判断是否数组中所有的元素都大于0
Array.prototype.all = function(c) {
 for(var i = 0; i < this.length; i++) {
  if (!c(this)) return false;
 }
 return true;
}
// 移除数组指定的元素,如果指定了limit,则仅移除limit个指定元素,如果省略limit或者其值为0,则所有指定元素都会被移除。
Array.prototype.unset = function(string, limit) {
 var len = this.length, i = 0, count = 0;
 for (i; i < len; i++) {
  if (this[i] == string) {
   this.splice(i, 1);
   if (limit && limit > 0) {
    count++;
    if (count == limit) break;
   }
  }
 }
 return this;
}
// 移除数组中重复的元素
Array.prototype.unique = function() {
 var arr = tmp = [], i, len = this.length;
 if (len < 2) return this;
 for (i = 0; i < len; i++) {
  if (tmp[this[i]]) {
   arr.push(this[i]);
   tmp[this[i]] = true;
  }
 }
 return arr;
}
Array.prototype.min = function() {return Math.min.apply(null, this)} // 求数组中最小值
Array.prototype.max = function() {return Math.max.apply(null, this)} // 求数组中最大值

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

Javascript 相关文章推荐
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
Ionic如何实现下拉刷新与上拉加载功能
Jun 03 Javascript
Bootstrap轮播插件简单使用方法介绍
Jun 21 Javascript
完美解决iview 的select下拉框选项错位的问题
Mar 02 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 Javascript
JS使用cookie保存用户登录信息操作示例
May 30 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
Vue数字输入框组件的使用方法
Oct 19 Javascript
Vue中错误图片的处理的实现代码
Nov 07 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
Nov 23 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 Javascript
分享网页检测摇一摇实例代码
Jan 14 #Javascript
jquery淡入淡出效果简单实例
Jan 14 #Javascript
jQuery实现的左右移动焦点图效果
Jan 14 #Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 #Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 #Javascript
jQuery遮罩层效果实例分析
Jan 14 #Javascript
JavaScript面向对象之私有静态变量实例分析
Jan 14 #Javascript
You might like
php $_ENV为空的原因分析
2009/06/01 PHP
php多文件上传实现代码
2014/02/20 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
JavaScript中的类型检查
2020/02/03 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python素数检测的方法
2015/05/11 Python
python学生管理系统代码实现
2020/04/05 Python
利用python如何处理nc数据详解
2018/05/23 Python
Python jieba库用法及实例解析
2019/11/04 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
求职毕业生自荐书
2014/02/08 职场文书
大学学生个人总结
2015/02/15 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
CocosCreator如何实现划过的位置显示纹理
2021/04/14 Javascript
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
React自定义hook的方法
2022/06/25 Javascript