js学习笔记
js学习笔记
zxl911400 发表于1年前
js学习笔记
  • 发表于 1年前
  • 阅读 0
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 扩展Date String Object等方法,设置方法不被枚举

///////////////////////////////////////////
/*global*/
/////////////////////////////////////
//lurk.Dom.append(lurk.Dom.query('head', true) || document.documentElement, 'script').text = res.responseText;
/**
 * 根据方法名获取方法
 */
function getFunction(func)
{
  if(func.isFunction())
    return func;
  return new Function(func + "()");
}
/**
 * 设置方法为不可枚举类型
 * @param objs
 */
hideFunctions = function(objs) {
  var i = 0, p;
  for (; i < objs.length; i++) {
    p = objs[i].prototype;
    for ( var o in p) {
      if (p[o].isFunction()) {
        Object.defineProperty(p, o, {
          enumerable: false
        });
      }
    }
  }
}
// /////////////////////////////////////
/* Date 扩展 */
// ////////////////////////////////////
/**
 * 判断指定值是否是数组
 * 
 * @return 如果是数组,返回true
 * 
 */
Object.prototype.isArray = function() {
  return Array.isArray(this);
}
/**
 * 判断指定值是否是字符串
 * 
 * @return 如果是字符串,返回true
 * 
 */
Object.prototype.isString = function() {
  return typeof this == 'string';
};
/**
 * 判断指定值是否是数字
 * 
 * @return 如果是数字,返回true
 * 
 */
Object.prototype.isNumber = function() {
  return typeof this == 'number';
};
/**
 * 判断指定值是否是函数
 * 
 * @return 如果是函数,返回true
 * 
 */
Object.prototype.isFunction = function() {
  return typeof this == 'function';
};

/**
 * 判断是否是日期
 * @param value
 * @returns {Boolean}
 */
Object.prototype.isDate = function(value)
{
  return typeof this == 'date';
}

/**
 * 
 * @returns
 */
Object.prototype.clone = function()
{
  var me = this, o;
  o = (me.isString() || me.isNumber) && me;
  if(o) return o;
  o = me.isArray() && [];
  o = !o && {};
  for(var k in me){
    (o[k] = me[k]);
  };
  return o;
}
// /////////////////////////////////////
/* Date 扩展 */
// ////////////////////////////////////
Date.prototype.format = function(fmt) {
  var d = this, f = fmt, k;
  var o = {
    "M+": d.getMonth(),
    "d+": d.getDate(),
    "h+": d.getHours(),
    "m+": d.getMinutes(),
    "s+": d.getSeconds(),
    "S": d.getMilliseconds()
  }
  if (/(y+)/.test(f)) {
    f = f.replace(RegExp.$1, d.getFullYear());
  }
  for (k in o) {
    if (new RegExp("(" + k + ")").test(f)) {
      f = f.replace(RegExp.$1, ((k === 'S' ? "000" : '00') + o[k]).substr(("" + o[k]).length));// ms值为三位数
    }
  }
  return f;
}
Date.prototype.formatDate = function() {
  return this.format('y-M-d');
}
Date.prototype.formatDateTime = function() {
  return this.format('y-M-d h:m:s');
}
// ///////////////////////////////////////////////////
/* Number扩展方法 */
// /////////////////////////////////////////////
/**
 * 格式化日期
 * 
 * @param time
 *          Date对象或者毫秒值
 * @param fmt
 *          返回日期格式,Example: 'yyyy-MM-dd hh:mm:ss' or 'y-M-d h:m:s'
 * @return 日期格式的文本,Example: '2016-01-01 19:00:00'
 */
Number.prototype.formatDate = function(fmt) {
  return new Date(this).format(fmt);
}
/**
 * 格式化货币
 * 
 * @return 货币格式的文本,Example: '1,000,000.00'
 */
Number.prototype.formatCurrency = function() {
  var n = this.toFixed(2) + "", r = /(\d)(\d{3}[\.,])/;
  while (r.test(n))
    n = n.replace(r, "$1,$2");
  return n;
}
/**
 * 格式化字节大小
 * 
 * @param size
 *          字节大小
 * @return 格式后文本,Example: '1.03 GB','430 Byte(s)',etc.
 */
Number.prototype.formatByteSize = function() {
  var v = ["Byte(s)", "KB", "MB", "GB"], i = 0, s = this;
  while (s > 1024 && i < 4) {
    s = s / 1024;
    i++;
  }
  return (i ? s.toFixed(2) : s) + " " + v[i];
}
/**
 * 舍弃指定精度后的小数,对保留的末位数字舍入
 * 
 * @parem precision 要保留的小数位数
 * @return 结果值
 */
Number.prototype.roundUp = function(precision) {
  return Math.ceil(this * Math.pow(10, precision)) / Math.pow(10, precision);
}
/**
 * 舍弃指定精度后的小数
 * 
 * @parem precision 要保留的小数位数
 * @return 结果值
 */
Number.prototype.roundDown = function(precision) {
  return Math.floor(this * Math.pow(10, precision)) / Math.pow(10, precision);
}
// ///////////////////////////////////////////////////
/* String扩展方法 */
// /////////////////////////////////////////////
/**
 * 将日期格式的文本解析为时间值 Example:'2016-01-01'
 * 
 * @return 毫秒值
 */
String.prototype.parseDate = function() {
  return new Date(this.replace(/[^0-9/\s+:]/g, '/')).getTime();
}
/**
 * 判断文本是否含指定前缀
 * 
 * @param prefix
 * @return 如果包含指定前缀,返回true
 */
String.prototype.startWith = function(prefix) {
  return this.indexOf(prefix) == 0
}
/**
 * 判断文本是否含指定后缀
 * 
 * @param suffix
 * @return 如果包含指定后缀,返回true
 */
String.prototype.endWith = function(suffix) {
  return new RegExp(suffix + '$').test(this);
}
/**
 * 去除文本前后空白字符(如:空格、TAB字符等)
 * 
 * @param prefix
 * @return 结果字符串
 */
String.prototype.trim = function() {
  return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
}
// ///////////////////////////////////////////////////
/* Array扩展方法 */
// /////////////////////////////////////////////
Array.prototype.insert = function(index, items) {
  var i = items.isArray() ? items : [items];
  i.unshift(index, 0);
  this.splice.apply(this, i);
  return this;
}

///////////////////////////////////////////////////
/*隐藏自定义属性,不被for in 枚举*/
//////////////////////////////////////////////////
hideFunctions([Object, Date, Number, String, Array]);

共有 人打赏支持
粉丝 0
博文 2
码字总数 956
作品 1
×
zxl911400
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: