JavaScript中的对象

  严格来说,javascript并不是真正意义上的面向对象的语言,但是我们在编写javascript的时候仍然有对象一说,javascript虽然算不上真正意义上的面向对象,但是我们依然可以使用面向对象的编程方式,这里紧紧是编程方式与习惯。我本人是不喜欢用javascript做面向对象的复杂操作的。但是在javascript里仍然还是存在对象的,应该说javascript里一切都是对象。在javascript中有3种对象。面向对象的3大特征,继承,封装,多态。javascript其实可以做到模拟这三大特征,以后有时间再讲讲,现在我们先看看javascript中的三种对象吧

1,本地对象

本地对象:独立于宿主环境的ECMAScript实现提供的对象。这句话我们可以理解为由ECMAScript提供的,与浏览器无关的对象。其实这里的解释有点牵强,能宿主javascript的不单单是浏览器,但是我们这里只谈浏览器,所以这里为了方便理解就理解成:宿主环境=浏览器吧

那么本地对象有哪些,其实就是我们一直用到的基本对象,比如String,Boolean,Numebr,Object,Function,Array等等。这里介绍一点点关于对象的创建,销毁等问题。我们知道javascript属于弱类型,所以我们如果想要实例化一个对象可以这样

var oObject = new Object();

这里需要注意的一点是,javascript虽然是弱类型语言,但是本质上依然存在引用类型一说,我们这里的oObject依然存储的是类型指针。就是存储的实际上是指向Object的引用。javascript跟.net CLR一样有垃圾收集器,即无引用对象销毁,我们可以不必手动销毁对象,但是也仍可以手动销毁,手动销毁只需要把对象的引用设置为null。但是一定要注意,要确保所有的对象都不存在引用。否则讲会引发object未定义的异常。

我们来看看比较重要的几个本地对象,先看看Array对象,创建一个Array非常简单,有以下的几种方式

1 var aArray = new Array();  //这里不指定初始大小

var aArray = new Array(20);  //这里指定初始大小为20的数组

var aArray = new Array("Hello","World");  //这里也可以直接赋值。

2 var aArray =["","",""];  //第二种初始化的方式是直接用值初始化数组。这是一种简写的方式

数组的访问和赋值也是很简单的,使用下标访问和赋值,下标从0开始,到length-1结束,所以我们这里可以使用下列代码访问或者赋值

aArray[0]="Hello";

var oString =aArray[0];

 这里我们可以动态的添加元素进数组,比如这里我们定义一个数组

var aArray = new Array("Hello","World");

这个数组的长度是2,我们可以用Length属性判断。然后我们可以给数组下标为2的元素赋值

aArray[2]="Edrick";

当我们再使用length的时候会发现数组的长度增加为3,那么如果我们给下标为25的数组元素赋值呢?

aArray[25]="Edrick";

我们可以用toString()方法查看,toString()方法会把数组的所有元素组合成字符串,元素之间使用逗号间隔。我们会发现下标3-24的所有元素都为null.

数组还有两个方法返回以,号相隔的字符串方法

1 valueOf()

2 toLocaleString()

这里的三个方法都是返回的,号相隔,如果我们想返回的字符串不想以逗号相隔,而是想以我们自定义的任何符号相隔呢,方法join方法可以做到

    <script type="text/javascript">
        window.onload = function () {
            var aArray = ["Hello", "World","Edrick"];
            alert(aArray.join("----"));
        }
    </script>

这里就可以使用任何我们自定义的符号相隔了

在Array和String之间能够互相转换,这对我们来说就是非常有用的功能

 window.onload = function () {
            var ostring = "Hello,World,Edrick";
            var oarray = ostring.split(",");
            alert(oarray.length);
            alert(oarray[0]);
            alert(oarray[1]);
            alert(oarray[2]);

        }

下面来看看另外的两个方法

concat()  //将制定元素附加到数组的结尾

        window.onload = function () {
            var oarray = ["Hello", "World", "Edrick"];
            var oarray1 = oarray.concat("good", "afternoon");
            alert(oarray1);

        }

指定的元素会添加到数组的末尾,返回的是新的数组

slice()方法返回制定下标的新数组

        window.onload = function () {
            var oarray = ["Hello", "World", "Edrick", "good", "afternoon"];
            var oarray1 = oarray.slice(1);
            var oarray2 = oarray.slice(1, 4);
            alert(oarray1);
            alert(oarray2);

如果只制定了一个参数,则返回第“参数1”后所有的元素,不包括“参数1”。如果指定了两个元素,则返回“参数1”-“参数2”之间的所有元素,不包括“参数1”“参数2”  

Arrya支持栈结构,即“后进先出”,为了支持这种结构,Array提供了两个方法

push()   //将一个或者多个元素添加到数组的结尾

pop()  //删除最后一个数组项

        window.onload = function () {
            var oarray = new Array();
            oarray.push("Hello");
            oarray.push("World");
            oarray.push("Edrick");
            alert(oarray.toString());
            var item = oarray.pop();
            alert(item);
            alert(oarray);

pop()方法会将删除的元素返回,这个方法不会返回新的数组,push也不会,但是上面提到的concat方法却是会返回新数组。

数组能够操作最后一项,当然也可以操作第一项

 unshift()  //将元素放在数组的第一项,其他元素向后挪,返回数组的新length

shift() //删除数组的第一个元素,其他元素向前挪,返回删除的元素

数组提供sort()方法对数组进行排序,如果数组为字符串数组,会直接根据首字母进行排序,如果是数字,则把数字转换为字符串然后比较字符代码

最后看看数组的一个有点复杂的方法splice()

oarray.splice(0,2)  // 从0开始,删除两项

oarray.splice(2,0,"arg1","arg2")  //从2开始,删除0个,插入"arg1",和"arg2"

oarray.splice(2,2,"arg1","arg2")   //从2开始,删除2个,插入"arg1",和"arg2"

Data对象

data对象即是我们使用的时间,实例化data对象也很容易

var odata = new Data();

实例化Data的时候,我们可以使用距离1970年1月1日凌晨12点的毫秒数,也可以不传入任何参数得到现在的时间,更可以传入特定格式的字符串,一般支持下面的两种日期格式

mm/dd/yyyy(11/04/2011);

mmmm dd,yyyy(January 12,2004);

我们像这样实例化,只能得到日期,得不到时间。

也可以使用UTC实例化

 var odata = new Date(Date.UTC(2011,10,4,13,5));

需要注意的一点是,这里设置的月份的时候需要用现有的月份减去1,也就是说,12月就是11,1月就是0,后面也可以设置小时,分钟,秒钟。同样,也可以直接去掉Data.UTC直接实例化data的时候加参数var odata = new Date(2011,10,4,13,5);

下面来看一下data的一些属性和方法

toDataString()  //以实现的特定的格式显示Data的日期部分(即只有月/日/年)

toTimeString() //以实现的特定格式显示data的时间部分(即小时,分,秒,和时区)

toLocaleString() //以地点特定的格式显示data的日期和时间

toLocaleDataString()  //以地点的特定格式显示data的日期部分

tolocaelTimeString()  //  以地点的特定格式显示data的时间部分

toUTCString()  //以实现的特定格式显示data的UTC时间

getTime() //返回日期的毫秒表示

setTime(millidseconds) //设置日期的毫秒表示

getFullYear()  //返回用4位数字表示的日期的年份

getUTCFullYear()  //返回用4位数字表示的UTC日期的年份

setFullYear(years)  //设置日期的年份,参数必须是4位数字的年份值

setUTCFullYear(years)  //设置UTC日期的年份,参数必须是4位数字的年份值

getMonth()  //返回日期的月份值,有数字0到11表示

getUTCMonth()  //返回UTC日期的月份值,有数字0到11表示

setMonth(months)  //设置日期的月份为大于等于0的月份,对于大于11的月份,累计年份

setUTCMonth(months)  //设置UTC日期的月份为大于等于0的月份,对于大于11的月份,累计年份

getDate() //返回该日期该月中的某天

getUTCDate()  //返回UTC日期该月中的某天

setData(date)  //设置该日期该月中的某天

setUTCDate(date)  //设置该UTC日期该月中的某天

getDay()  //返回该日期为星期几

getUTCDay()  //返回该UTC日期为星期几

setDay(days)  //设置该日期为星期几

setUTCDay(days)  //设置该UTC日期为星期几

getHours()  //返回日期中的小时值

getUTCHours() //返回UTC日期中的小时值

setHours()  //设置日期中的小时值

setUTCHours  //设置UTC日期中的小时值

getMinutes()  //返回日期中的分钟值

getUTCMinutes()  // 返回UTC日期中的分钟值

setMinutes(minutes)  //设置日期中的分钟值

setUTCMinutes(minutes)  //设置UTC日期中的分钟值

getSeconds()  //返回日期中的秒值

getUTCSeconds()  //返回UTC日期中的秒值

setSeconds(seconds) //设置日期中的秒值

setUTCSeconds(seconds)  //设置UTC日期中的秒值

getMilliseconds()  //返回日期中的毫秒值

getUTCMilliseconds()  //返回UTC日期中的毫秒值

setMilliseconds(seconds) //设置日期中的毫秒值

setUTCMilliseconds(seconds)  //设置UTC日期中的毫秒值

 

内置对象

内置对象即由javascript实现的对象,不依赖于宿主,我们不必实例化内置对象,因为它已经在javascript加载的时候被javascript实现。我们只需要直接使用。

Global对象

先看看Global比较有用的几个属性

encodeURI()  //编码传递给浏览器的URI(编码无效字符)

encodeURIComponent()  //处理URL的一个片段。

decodeURI()   //对应的解码

decodeURIComponent()对应的解码

eval(""); //要执行的javascript代码

undefined  //Undefined类型的字面量

NaN  //非数的专用数值

Infinity  //无穷大的专用数值

Object //Object的构造函数

Array  //Array的构造函数

Function  //Function的构造函数

Boolean  //Boolean的构造函数

String  //String的构造函数

Number  //Number的构造函数

Data  //Data的构造函数

RegExp  //RegExp的构造函数

Error  //Error的构造函数

EvalError  //EvalError的构造函数

RangeError  //RangeError的构造函数

ReferenceError  //ReferenceError的构造函数

SyntaxError  //SyntaxError的构造函数

TypeError  //TypeError的构造函数

URIError  //URIError的构造函数

 

Math对象

数学对象,用于数学计算

E   //值e,自然对数的底

LN10  //10的自然对数

LN2  //2的自然对数

LOG2E  //以2为底E的对数

LOG10E  //以10为底E的对数

PI  //值π

SQRT1_2  //1/2的平方根

SQRT2   //2的平方根

min()  //判断一组数中的最小值

max()  //判断一组数中的最大值

abs()  //返回数字的绝对值

ceil()  //总是向上舍入数字

floor() //总是向下舍入数字

round() //标准的舍入函数

Math对象最有用的方法我觉得就是random().该方法返回0-1之间的随机数

var number = Math.floor(Math.random()*total_number+first_value);

1-10之间的随机数

var number = Math.floor(Math.random()*10+1);

 

宿主对象

由宿主环境提供的对象。比如window,location,navigate,history等等。

 

This关键字

关键字this总是指向调用该方法的对象

this总是指向调用该方法的对象而不是指向变量名.

posted @ 2011-11-04 18:48  刘中栋  阅读(544)  评论(1)    收藏  举报