学海无涯

记录我的程序人生...

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、对象函数的扩充和代码

扩充函数的对象包括ArrayStringDateNumberBoolean

Array对象扩充函数

函数名

参数

说明

indexOf

_value

返回数组中值等于参数_value的元素索引位置,如果没有返回-1

lastIndexOf

_value

返回数组中值等于参数_value的元素反向索引位置,如果没有返回-1

contains

_value

返回数组中是否存在值等于参数_value的元素,true为存在,false不存在

copy

 

拷贝数组到一个新数组中

insertAt

_value, i

插入参数值_value到参数i指定索引的位置上

insertBefore

_value, _invalue

插入参数值_value到数组中值等于参数_inValue的元素前

removeAt

i

删除索引位置为i的元素

remove

_value

删除值为_value的元素

 

String对象扩充函数

函数名

参数

说明

trim

 

返回去掉前后空白字符的字符串

lTrim

 

返回去掉左边的空白字符的字符串

rTrim

 

返回去掉右边的空白字符的字符串

lTrimZero

 

返回去掉左边的”0”字符的字符串

left

_leftNum

返回左边_leftNum个字符

right

_rightNum

返回右边_rightNum个字符

hasAlpha

 

判断字符串是否有Alpha字符(@#$等非数字字母字符)

isAlpha

 

判断字符串是否完全是Alpha字符

isLetter

 

判断字符串是否完全是字母字符

isFigure

 

判断字符串是否完全是数字字符

isDomainName

 

判断字符串是否是一个合法的域名字符串

isEmail

 

判断字符串是否是一个电子邮件地址

isHex

 

判断字符串是否是十六进制字符

isGuid

 

判断字符串是否是Guid

isInteger

_bitType

判断字符串是否可为指定_bitType类型的整型数(“64bit”||”32bit”||”16bit”)

isInt8

 

判断字符串是否可为int8的整型数

isInt16

 

判断字符串是否可为int16的整型数

isInt32

 

判断字符串是否可为int32的整型数

isInt64

 

判断字符串是否可为int64的整型数

toDate

 

将字符串转换成时间类型数值,能够转成合法Date的字符形如:yyyy-mm-dd or yyyy/mm/dd

toNumber

 

将字符串转换成为数字类型数值

 

Date对象扩充函数

函数名

参数

说明

getQuarter

 

返回时间的季度值

dateAdd

_timeInterval, _number

返回间隔_number量的时间,_timerInterval为间隔类型,分别有年(yyyy),月(mm),日(dd),时(h),分(m),秒(s),星期(ww)

formatDateTime

_nameFormate

返回时间的格式化字符串,_nameFormate为格式类型,此函数可参考vbs同名函数

isNaN

 

时间变量是否是合法的,true为非法变量,false为合法的。

 

Number对象扩充函数

函数名

参数

说明

abs

 

返回值的绝对值

acos

 

返回值以弧度为单位的反余弦

asin

 

返回值以弧度为单位的反正弦

atan

 

返回值以弧度为单位的反正切

atan2

_value

返回值与_value的商的反正切

ceil

 

返回大于等于值的下一个整数

cos

 

返回值的余弦

exp

 

返回值的欧拉常量

floor

 

返回小于值等于值的整数

log

 

返回值以e为底的自然对数

round

 

返回值四舍五入后的数

sin

 

返回值以弧度为单位的正弦

sqrt

 

返回值的平方根

isNaN

 

判断是否是一个合法的数值

tan

 

返回值以弧度为单位的正切

 

浏览器中上述对象扩充了两个消息提示函数alertcofirm,可以直接使用对象引用函数来弹出消息框。

 

 

 

 

代码部分:

-----------------------------------------------------------------------------------------------------------------------

Array.prototype.indexOf = function(_value){

         for(var i=0;i<this.length;i++)if(this[i]==_value)return i;

         return -1;

};

Array.prototype.lastIndexOf = function(_value){

         for(var i=this.length-1;i>=0;i--)if(this[i]==_value)return i;

         return -1;

};

Array.prototype.contains = function(_value){return this.indexOf(_value)!= -1;};

Array.prototype.copy = function(){return this.concat();};

Array.prototype.insertAt = function(_value,i){this.splice(i,0,_value);};

Array.prototype.insertBefore = function(_value,_inValue){

         var i=this.indexOf(_inValue);

         if(i== -1)this.push(_value);

         else this.splice(i,0,_value);

};

Array.prototype.removeAt = function(i){this.splice(i,1);};

Array.prototype.remove = function(_value){

         var i=this.indexOf(_value);

         if(i!= -1)this.splice(i,1);

};

 

String.prototype.trim = function(){return this.replace(/(^\s+)|\s+$/g,"");};

String.prototype.lTrim = function(){return this.replace(/(^\s+)/g,"")};

String.prototype.rTrim = function(){return this.replace(/(\s+$)/g,"")};

String.prototype.lTrimZero = function(){return this.replace(/(^0+)/g,"")};

String.prototype.left = function(_leftNum){return this.substr(0,_leftNum)};

String.prototype.right = function(_rightNum){return this.substr(this.length - _rightNum)};

String.prototype.hasAlpha = function(){

         var _checkAlpha = /[\/\\\.\*\+\?\|\(\)\{\}\[\]\-~`!@#$%^&_=:;"'<>,.]/;

         return(_checkAlpha.test(this));

};

String.prototype.isAlpha = function(){

         var _checkAlpha = /[^\/\\\.\*\+\?\|\(\)\{\}\[\]\-~`!@#$%^&_=:;"'<>,.]/;

         return(!_checkAlpha.test(this));

};

String.prototype.isLetter = function(){return(!(/\W/.test(this)||/\d/.test(this)));};

String.prototype.isFigure = function(){return(!/\D/.test(this));};

String.prototype.isDomainName = function(){return(!/[^\w-_\.]|^\.|\.$/.test(this));};

String.prototype.isEmail = function(){

         var _emailList = this.split("@");

         if(_emailList.length != 2)return false;

         return((!/[^\w-_]/.test(_emailList[0]))&&_emailList[1].isDomainName());

};

String.prototype.isHex = function(){return(!/[^\dABCDEFabcdef]/.test(this));};

String.prototype.isGuid = function(){

         if(this.left(1)!="{"||this.right(1)!="}")return false;

         var _hexNumberList = this.replace(/(^\{)|(\}$)/g,"").split("-");

         if(_hexNumberList.length!=5)return false;

         if(_hexNumberList[0].length!=8||!_hexNumberList[0].isHex())return false;

         if(_hexNumberList[1].length!=4||!_hexNumberList[1].isHex())return false;

         if(_hexNumberList[2].length!=4||!_hexNumberList[2].isHex())return false;

         if(_hexNumberList[3].length!=4||!_hexNumberList[3].isHex())return false;

         if(_hexNumberList[4].length!=12||!_hexNumberList[4].isHex())return false;

         return true;

};

String.prototype.isInteger = function(_bitType){

         var _limitValue = [];

         _limitValue["Upper"] = [];

         _limitValue["Lower"] = [];

         _limitValue["Upper"]["64bit"] = "9223372036854775807";

         _limitValue["Upper"]["32bit"] = "2147483647";

         _limitValue["Upper"]["16bit"] = "32767";

         _limitValue["Lower"]["64bit"] = "9223372036854775808";

         _limitValue["Lower"]["32bit"] = "2147483648";

         _limitValue["Lower"]["16bit"] = "32768";

         var _plus = "Upper";

         var _theValue = new String(this);

         if(_theValue.indexOf("-")==0){

                   _theValue = _theValue.substr(1,_theValue.length-1);

                   _plus = "Lower";

         }      

         if(!_theValue.isFigure())return false;

         if(_limitValue[_plus][_bitType].length < _theValue.length)return false;

         if(_limitValue[_plus][_bitType].length == _theValue.length){

                   for(var i=0;i<_limitValue[_plus][_bitType].length;i++){

                            if(_theValue.charAt(i) < _limitValue[_plus][_bitType].charAt(i))return true;

                   }

                   if(_limitValue[_plus][_bitType] != _theValue)return false;

         }

         return true;

};

String.prototype.isInt8 = function(){

         var _theValue = this.toNumber();

         if(_theValue.isNaN())return false;

         if(_theValue < 0 || _theValue > 255)return false;

         if(_theValue.toString() != this)return false;

         return true;

};

String.prototype.isInt16 = function(){return this.isInteger("16bit");};

String.prototype.isInt32 = function(){return this.isInteger("32bit");};

String.prototype.isInt64 = function(){return this.isInteger("64bit");};

String.prototype.toDate = function(){

         var _dateStr = this.trim().split(/\s/)[0];

         var _timeStr = (this.trim().split(/\s/)[1]?this.trim().split(/\s/)[1]:"1:1:1");

         var _dateSplitSymbol = /[\/\-,]/;

         var _timeSplitSymbol = /[:,]/;

 

         if(!_dateSplitSymbol.test(_dateStr))return new Date("x");

         var _SplitSymbol = _dateSplitSymbol.exec(_dateStr);

         var _dateList = [];

         if(_SplitSymbol == ""){

                   if(!(_dateStr.indexOf("") > _dateStr.indexOf("") && _dateStr.indexOf("") > _dateStr.indexOf("") && _dateStr.indexOf("")> 1))return new Date("x");

                   _dateList = _dateStr.split(/[年月日]/);

         }else _dateList = _dateStr.split(_SplitSymbol);

         if(_dateList.length < 2)return new Date("x");

 

         var _timeList = [1,1,1];

         if(_timeSplitSymbol.test(_timeStr)){

                   _SplitSymbol = _timeSplitSymbol.exec(_timeStr);

                   if(_SplitSymbol == ""){

                            if(!(_timeStr.indexOf("") > _timeStr.indexOf("") && _timeStr.indexOf("") > _timeStr.indexOf("") && _timeStr.indexOf("")> 1))return new Date("x");

                            _timeList = _timeStr.split(/[时分秒]/);

                   }else _timeList = _timeStr.split(_SplitSymbol);

         }

         return new Date(_dateList[0],_dateList[1],_dateList[2],_timeList[0],_timeList[1],_timeList[2]);

};

String.prototype.toNumber = function(){return new Number(this)};

 

 

Date.prototype.getQuarter = function(){return ((this.getMonth()+1)/3).ceil();};

Date.prototype.dateAdd = function(_timeInterval,_number){

         switch(_timeInterval.toUpperCase()){

                   case "YYYY":

                            return new Date(this.getFullYear() + _number,this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());

                            break;

                   case "MM":

                            return new Date(this.getFullYear(),this.getMonth() + _number,this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds());

                            break;

                   case "DD":

                            return new Date(this.getFullYear(),this.getMonth(),this.getDate() + _number,this.getHours(),this.getMinutes(),this.getSeconds());

                            break;

                   case "H":

                            return new Date(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours() + _number,this.getMinutes(),this.getSeconds());

                            break;

                   case "M":

                            return new Date(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes() + _number,this.getSeconds());

                            break;

                   case "S":

                            return new Date(this.getFullYear(),this.getMonth(),this.getDate(),this.getHours(),this.getMinutes(),this.getSeconds() + _number);

                            break;

                   case "WW":

                            return new Date(this.getFullYear(),this.getMonth(),this.getDate() + _number*7,this.getHours(),this.getMinutes(),this.getSeconds());

                            break;

                   default:return this;

         }

};

Date.prototype.formatDateTime = function(_nameFormate){

         switch(_nameFormate){

                   case 0:

                            return this.getFullYear().toString().right(2) + "/" + (this.getMonth() + 1).toString() + "/" + this.getDate().toString() + " " + this.getHours().toString() + ":" + this.getMinutes().toString() + ":" + this.getSeconds().toString();

                            break;

                   case 1:

                            return this.getFullYear().toString() + "" + (this.getMonth() + 1).toString() + "" + this.getDate().toString() + "";

                            break;

                   case 2:

                            return this.getFullYear().toString().right(2) + "/" + (this.getMonth() + 1).toString() + "/" + this.getDate().toString();

                            break;

                   case 3:

                            return this.getHours().toString() + ":" + this.getMinutes().toString() + ":" + this.getSeconds().toString();

                            break;

                   case 4:

                            return this.getHours().toString() + ":" + this.getMinutes().toString();

                            break;

                   default:

                            return this.getFullYear().toString().right(2) + "/" + (this.getMonth() + 1).toString() + "/" + this.getDate().toString() + " " + this.getHours().toString() + ":" + this.getMinutes().toString() + ":" + this.getSeconds().toString();

         }

};

Date.prototype.isNaN = function(){return isNaN(this);};

 

Number.prototype.abs = function(){return Math.abs(this)};

Number.prototype.acos = function(){return Math.acos(this)};

Number.prototype.asin = function(){return Math.asin(this)};

Number.prototype.atan = function(){return Math.atan(this)};

Number.prototype.atan2 = function(){return Math.atan2(this)};

Number.prototype.ceil = function(){return Math.ceil(this)};

Number.prototype.cos = function(){return Math.cos(this)};

Number.prototype.exp = function(){return Math.exp(this)};

Number.prototype.floor = function(){return Math.floor(this)};

Number.prototype.log = function(){return Math.log(this)};

Number.prototype.round = function(){return Math.round(this)};

Number.prototype.sin = function(){return Math.sin(this)};

Number.prototype.sqrt = function(){return Math.sqrt(this)};

Number.prototype.isNaN = function(){return isNaN(this)};

Number.prototype.tan = function(){return Math.tan(this)};

 

 

if(window){

         Array.prototype.alert = function(){window.alert(this);}

         Array.prototype.confirm = function(){return window.confirm(this);}

         String.prototype.alert = function(){window.alert(this)};

         String.prototype.confirm = function(){return window.confirm(this)};

         Date.prototype.alert = function(){window.alert(this.toLocaleDateString());};

         Date.prototype.confirm = function(){return window.confirm(this.toLocaleDateString());};

         Number.prototype.alert = function(){window.alert(this)};

         Number.prototype.confirm = function(){return window.confirm(this)};

         Boolean.prototype.alert = function(){window.alert(this);};

         Boolean.prototype.confirm = function(){return window.confirm(this);};

}

-----------------------------------------------------------------------------------------------------------------------

 

 

二、关于prototype属性

 

JavaScript1.1中,几个基本对象StringRegExpArrayDateNumberBooleanFunction增加了一个原型(prototype)属性,该属性容许程序员向已有对象原型添加新的属性和函数。其用法如下:

function obj(){

         this.id = “”;

}

obj.prototype.set_id = function(_value){

         this.id = _value;

}

var obj1 = new obj();

obj1.set_id(“test”);

通过prototype属性给obj类(事实上不是类,而是一个函数,这里只是为了方便表述)创建了一个函数(给set_id赋值为一个函数)。

prototype对于自定义的伪类意义不是很大,因为自定义的伪类也完全可以在构造函数中创建。

但是它对于已有的JavaScript对象类型的函数扩充有着比较重要的意义,通过prototype,可以给JS基本对象扩充新的函数。例如在js中没有类似于vbs中的trim函数,倘若单独把trim函数以及其他有用的函数写成一个独立的函数库,又失去了js脚本的那种语言简洁的特点。最理想的情况是将它扩充到已有的对象原型中去。

看看一些有趣的例子:

(“ 1234 ”).trim().alert(); //弹出一个对话框提示为1234

 

if(text1.value.toDate().isNaN())alert(“date input error!”); //在一个文本框中输入时间,格式不正确提示错误!

 

 

扩充的函数中比较有实用的是String的函数,trimleftrightisXXX等函数在表单的验证当中是比较常用的。

posted on 2006-09-08 16:32  josson  阅读(1031)  评论(0编辑  收藏  举报