`
高军威
  • 浏览: 181024 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js常用的对象扩展方法

阅读更多
/**
 * js bug:解决 javascript 的 小数截取的bug。<br>
 * bug: alert(parseFloat(0.006).toFixed(2)); 显示 0.00 修改后显示 0.01
 */
Number.prototype.toFixed = function(d) {
	var s = this + "";
	if (!d)
		d = 0;
	if (s.indexOf(".") == -1)
		s += ".";
	s += new Array(d + 1).join("0");
	if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {
		var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;
		if (a == d + 2) {
			a = s.match(/\d/g);
			if (parseInt(a[a.length - 1]) > 4) {
				for ( var i = a.length - 2; i >= 0; i--) {
					a[i] = parseInt(a[i]) + 1;
					if (a[i] == 10) {
						a[i] = 0;
						b = i != 1;
					} else
						break;
				}
			}
			s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"),
					"$1.$2");
		}
		if (b)
			s = s.substr(1);
		return (pm + s).replace(/\.$/, "");
	}
	return this + "";
};

// 给Number类型增加四则运算
/**
 * js bug:js四则运算小数精度丢失的bug修复。例如:1.5451+0.34133
 * 按理来说应该是等于1.88643,结果JS给计算时居然算成1.88629999999998了 调用方法
 */
/**
 * 加法:1.5451+0.34133 的调用方法为:var s = (1.5451).add(0.34133).toFixed(2);
 * alert((7.1).add(12.00027)+"="+(7.1+12.00027));
 */
Number.prototype.add = function(arg) {
	var bit1, bit2, m;
	try {
		bit1 = arg.toString().split(".")[1].length;
	} catch (e) {
		bit1 = 0;
	}
	try {
		bit2 = this.toString().split(".")[1].length;
	} catch (e) {
		bit2 = 0;
	}
	m = Math.pow(10, Math.max(bit1, bit2));
	return (this * m + arg * m) / m;
};
/**
 * 减法: 1.5451-0.34133 的调用方法为:var s = (1.5451).sub(0.34133);
 */
Number.prototype.sub = function(arg) {
	var bit1, bit2;
	try {
		bit1 = arg.toString().split(".")[1].length;
	} catch (e) {
		bit1 = 0;
	}
	try {
		bit2 = this.toString().split(".")[1].length;
	} catch (e) {
		bit2 = 0;
	}
	var n = Math.max(bit1, bit2);
	var m = Math.pow(10, n);
	return Number(((this * m - arg * m) / m).toFixed(n));
};
/**
 * 乘法: 1.5451*0.34133 的调用方法为:var s = (1.5451).mul(0.34133).toFixed(3);
 */
Number.prototype.mul = function(arg) {
	var bit1, bit2;
	try {
		bit1 = arg.toString().split(".")[1].length;
	} catch (e) {
		bit1 = 0;
	}
	try {
		bit2 = this.toString().split(".")[1].length;
	} catch (e) {
		bit2 = 0;
	}
	var m = bit1 + bit2;
	// var n = (bit1 > bit2) ? bit1 : bit2;
	return (Number(this.toString().replace(".", ""))
			* Number(arg.toString().replace(".", "")) / Math.pow(10, m));// .toFixed(n);
};
/**
 * 除法: 1.5451/0.34133 的调用方法为:var s = (1.5451).div(0.34133).toFixed(3);
 */
Number.prototype.div = function(arg) {
	var bit1, bit2;
	try {
		bit1 = arg.toString().split(".")[1].length;
	} catch (e) {
		bit1 = 0;
	}
	try {
		bit2 = this.toString().split(".")[1].length;
	} catch (e) {
		bit2 = 0;
	}
	var n = Math.max(bit1, bit2);
	var m = Math.pow(10, n);
	// return (Number(this.toString().replace(".", ""))*m) /
	// (Number(arg.toString().replace(".", ""))*m);
	return ((this * m) / (arg * m));
};

// 给String对象增加四则运算
/**
 * 加法:1.5451+0.34133 的调用方法为:var s = (1.5451).add(0.34133).toFixed(2);
 * alert((7.1).add(12.00027)+"="+(7.1+12.00027));
 */
String.prototype.add = function(arg) {
	return Number(this).add(arg);
};
/**
 * 减法: 1.5451-0.34133 的调用方法为:var s = (1.5451).sub(0.34133);
 */
String.prototype.sub = function(arg) {
	return Number(this).sub(arg);
};
/**
 * 乘法: 1.5451*0.34133 的调用方法为:var s = (1.5451).mul(0.34133).toFixed(3);
 */
String.prototype.mul = function(arg) {
	return Number(this).mul(arg);
};
/**
 * 除法: 1.5451/0.34133 的调用方法为:var s = (1.5451).div(0.34133).toFixed(3);
 */
String.prototype.div = function(arg) {
	return Number(this).div(arg);
};
/**
 * 处理html转义 调用方法为:var s = "aaa".escape("aaa");
 */
String.prototype.escape = function (html){
	var codeSpan = /(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm;
	var codeBlock = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;
	var spans = [];
	var blocks = [];
	var text = String(html).replace(/\r\n/g, '\n').replace('/\r/g', '\n');
	text = '\n\n' + text + '\n\n';
	texttext = text.replace(codeSpan, function(code){
		spans.push(code);
		return '`span`';
	});
	text += '~0';
	return text.replace(codeBlock, function(code){
		blocks.push(code);
		return '\n\tblock';
	}).replace(/&(?!\w+;)/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/`span`/g, function(){
		return spans.shift();
	}).replace(/\n\tblock/g, function(){
		return blocks.shift();
	}).replace(/~0$/, '').replace(/^\n\n/, '').replace(/\n\n$/, '');
};

// 等比例缩放图片
//var flag = false;
/**
 * ImgD:原图 maxWidth:允许的最大宽度 maxHeight:允许的最大高度
 */
function resizeimg(ImgD, maxWidth, maxHeight) {
	//ImgD.style.display="none"; //隐藏加到这儿不管用,应该放到img标签中
	var image = new Image();
	var iwidth = maxWidth; // 定义允许图片宽度
	var iheight = maxHeight; // 定义允许图片高度
	image.src = ImgD.src;
	if (image.width > 0 && image.height > 0) {
		//flag = true;
		if (image.width / image.height >= iwidth / iheight) {
			if (image.width > iwidth) {
				ImgD.width = iwidth;
				ImgD.height = (image.height * iwidth) / image.width;
			} else {
				ImgD.width = image.width;
				ImgD.height = image.height;
			}
			//ImgD.alt = image.width + "×" + image.height;
		} else {
			if (image.height > iheight) {
				ImgD.height = iheight;
				ImgD.width = (image.width * iheight) / image.height;
			} else {
				ImgD.width = image.width;
				ImgD.height = image.height;
			}
			//ImgD.alt = image.width + "×" + image.height;
		}
	}
	centerImage(ImgD, maxWidth, maxHeight);
	ImgD.style.display="inline";
}
/**
 * Date:给日期对象添加格式化方法
 * 使用方法 var date = new Date().format('yyyy-MM-dd')
 */
Date.prototype.format = function(format){ 
	var o = {
		"M+" : this.getMonth()+1, //month
		"d+" : this.getDate(), //day
		"h+" : this.getHours(), //hour
		"m+" : this.getMinutes(), //minute
		"s+" : this.getSeconds(), //second
		"q+" : Math.floor((this.getMonth()+3)/3), //quarter
		"S" : this.getMilliseconds() //millisecond
	} 
	if(/(y+)/.test(format)) {
		format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
	}
	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;
}

/**
 * 原网址:http://www.cnblogs.com/mingmingruyuedlut/archive/2013/05/19/3082177.html
 * 扩展 Number 对象 formatMoney()方法(参数:保留小数位数,货币符号,整数部分千位分隔符,小数分隔符):
 * 调用方法为:var s = (60000).formatMoney(0,"","","");结果为:s = 60,000
 */
Number.prototype.formatMoney = function (places, symbol, thousand, decimal) {
    places = !isNaN(places = Math.abs(places)) ? places : 2;
    symbol = symbol !== undefined ? symbol : "$";
    thousand = thousand || ",";
    decimal = decimal || ".";
    var number = this,
        negative = number < 0 ? "-" : "",
        i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;
    return symbol + negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : "");
};

function centerImage(imgD, maxWidth, maxHeight) {
	// var div = imgD.parentNode;// 获取包含本图片的div不用这个
	if (imgD.height < maxHeight) {
		var top = (maxHeight - imgD.height) / 2-2;
		//ie6不支持这么获取高度,所以ie6下不执行
		if(imgD.height!=0){
			imgD.style.marginTop = top + "px";
		}
	}
	if (imgD.width < maxWidth) {
		var left = (maxWidth - imgD.width) / 2;
		//ie6不支持这么获取宽度,所以ie6下不执行
		if(imgD.width!=0){
			imgD.style.marginLeft = left + "px";
		}
	}
}
/**
 * 将字符串格式的日期(如:20150415092645)转换成js Date对象
 * 注意Date对象的初始化方式
 * */
function js_patch_getdate(stime) {
	var datetime = new Date(
			parseFloat(stime.substr(0, 4)),
			parseFloat(stime.substr(4, 2) - 1),
			parseFloat(stime.substr(6, 2)),
			parseFloat(stime.substr(8, 2)),
			parseFloat(stime.substr(10, 2)),
			parseFloat(stime.substr(12, 2)));
	return datetime;
}
function js_patch_fillZero(num, digit) {
	var str = '' + num;
	while (str.length < digit) {
		str = '0' + str;
	}
	return str;
}	
function debug_showAttr(obj)
{
	var str="<b>begin:the attribute of "+obj+"</b><br/>";
	for(var i in obj)
	{
		str+="<b>"+i+"</b>=="+obj[i]+"<br>";
	}
	document.body.innerHTML+=str;
}
function debug_showMsg(str)
{
	document.body.innerHTML+=str;
}
function debug_showMsgSrc(str)
{
	document.body.innerHTML+=str.replace(/</g,"&lt").replace(/>/g,"&gt");
}
分享到:
评论

相关推荐

    基于Rhino引擎的低侵入式JavaScript内置对象扩展方法.pdf

    基于Rhino引擎的低侵入式JavaScript内置对象扩展方法.pdf 本文主要介绍了基于Rhino引擎的低侵入式JavaScript内置对象扩展方法。Rhino引擎是一个JavaScript解析引擎,可以解析JavaScript脚本并生成网页信息。为了...

    Javascript 日期对象Date扩展

    Date对象扩展,包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。具体扩展的方法如下: parseCHS--静态方法。解析常用的中文日期并返回日期对象。 add--日期加减操作。[注:此函数在上传时还存在...

    Javascript面向对象扩展库(lang.js)

    `lang.js`是一个针对JavaScript的面向对象扩展库,专门为了弥补原生JavaScript在面向对象编程上的不足而设计。 `lang.js`库引入了类的概念,使得JavaScript可以更像传统的面向对象语言那样进行开发。在JavaScript中...

    Javascript面向对象扩展库代码分享

    最近一直在用js做项目,遇到了许多需要应用面向对象来设计的功能,由于js对OOP的原生支持还不是很完善,所以就写了一个面向对象的扩展库用做底层支持,现在把它单独整理出来,完善了一些功能,在这里分享一下

    javascript Prototype 对象扩展.docx

    ### JavaScript Prototype 对象扩展 #### 一、简介与背景 在JavaScript中,`prototype`是一个非常重要的概念,尤其是在面向对象编程(OOP)方面。通过利用`prototype`,开发者能够更高效地管理对象间的共享属性和...

    ExtJS对原有JavaScript对象的扩展

    ExtJs2.0学习系列(1)--Ext.MessageBox

    基于安卓平台的JavaScript扩展对象实现方法及绑定接口结构

    基于安卓平台的JavaScript扩展对象实现方法及绑定接口结构

    android中js对象C层扩展步骤说明及源码

    在这个类中,你可以定义一些成员函数,这些函数将映射到JavaScript对象的方法。 步骤二:注册C++类到JavaScript 为了使JavaScript能够访问你的C++对象,你需要在JNI层进行注册。在`MyJsObjectBridge.cpp`中,添加...

    WebKit中JsCore的扩展方法.pdf

    3. **添加方法**:除了属性,还可以为JavaScript对象添加方法。这通常涉及到在对应的类中定义函数,然后通过JavaScript调用。例如,为MyObject添加一个名为`myMethod`的方法,需要在MyObject_PrototypeImp或MyObject...

    deePool高效的JavaScript对象池

    DeePool通过实现JavaScript对象池,为开发者提供了一种优化内存使用、提高程序运行效率的有效手段。尤其在需要大量创建和销毁对象的场景下,使用DeePool可以显著提升性能,减少内存压力。掌握并合理运用DeePool,...

    常用js方法封装

    "常用js方法封装"的主题聚焦于将常见的JavaScript功能整理成可重用的模块,以提高代码的复用性和维护性。"do.1.21.js"文件很可能就是这种封装的实现,使用了JSDuck工具来生成相关的文档,帮助开发者理解和使用这些...

    javascript常用方法

    在JavaScript中,函数是第一类对象,可以作为变量、参数和返回值。...在JavaScript中,还可以通过原型链自定义对象的方法,扩展内置类型的功能,如上述对String和Date对象的扩展。这些技巧对于提升代码质量至关重要。

    关于js的Date对象的有用扩展

    在“关于js的Date对象的有用扩展”中,我们可以看到一些额外的功能或方法,可能是对原生Date对象的扩展,以满足更复杂的日期处理需求。 在`date.js`文件中,很可能包含了一些自定义函数或原型扩展,这些扩展可能...

    js javascript zInherit 对象 继承

    总的来说,`zInherit`是JavaScript对象继承的一种实现,它利用原型链实现继承关系,使得子类可以继承和扩展父类的属性和方法。理解并熟练掌握这种继承方式,对于深入理解JavaScript的OOP特性以及编写高效的代码至关...

    JS扩展类,克隆对象与混合类实例分析

    在JavaScript编程中,扩展类、克隆对象以及混合类是经常会用到的技术,它们各自有其特定的用途和实现方式。 首先我们来探讨“JS扩展类”。在JavaScript中,没有传统意义上的类继承机制,但可以通过原型链...

    JS中自定义类和对象.doc

    ### JS中自定义类和对象知识点详解 #### 一、工厂方法 在JavaScript中,**工厂方法**是一种创建对象的模式。它通过定义一个函数来返回一个特定类型的对象,这种方式可以使代码更加简洁和通用。 ##### 示例 ```...

    Javascript Object Browser 扩展

    JavaScript Object Browser扩展是一种针对开发人员的实用工具,它专门设计用于可视化和探索JavaScript对象的结构。这个扩展在浏览器环境中提供了一个交互式的界面,允许开发者深入理解代码中的对象、属性和方法,...

Global site tag (gtag.js) - Google Analytics