2.4 JavaScript内置对象
面向对象编程是JavaScript脚本语言采用的基本思想,它可以将属性和代码集成在一起,定义成一个类,从而使程序设计更加简洁规范。
2.4.1 JavaScript的内置类框架
JavaScript提供了一系列内置类,也称为内置对象。了解这些内置类的使用方法是使用JavaScript进行编程的基础。JavaScript的内置类框架如图2.22所示。
图2.22 JavaScript内置类框架
1.基类Object
从图2.22可以看出,所有的JavaScript内置类都是从基类Object继承而来的。
说明
继承是面向对象程序设计思想的重要机制。类可以继承其他类的内容,包括成员变量和方法。从一个类中继承得到的子类具有多态性,即相同的函数名称在不同的子类中有不同的实现。这就和子女会从父母那里继承到人类的共性,同时也具有自己的个性是一个道理。
基类Object包含的属性和方法如表2.1所示,这些属性和方法可以被所有JavaScript内置类继承。
表2.1 基类Object包含的属性和方法
2.内置类的基本功能
JavaScript内置类的基本功能如表2.2所示。
表2.2 JavaScript的内置类的基本功能
这里由于篇幅所限,只介绍Array、Date、String等常用内置类的使用方法。
2.4.2 数组
可以用静态的Array对象创建一个数组对象,以记录不同类型的数据。
语法:
arrayObj = new Array(); arrayObj = new Array([size]); arrayObj = new Array([element0[, element1[, ...[, elementN]]]]);
参数说明:
arrayObj:必选项。要赋值为Array对象的变量名。
size:可选项。设置数组的大小。由于数组的下标是从零开始,创建元素的下标将从0到size-1。
elementN:可选项。存入数组中的元素。使用该语法时必须有1个以上元素。
例如,创建一个可存入3个元素的Array对象,并向该对象中存入数据。代码如下:
arrayObj = new Array(3); arrayObj[0]= "a"; arrayObj[1]= "b"; arrayObj[2]= "c";
例如,创建Array对象的同时,向该对象中存入数组元素。代码如下:
arrayObj = new Array(1,2,3, "a", "b");
注意
用第1个语法创建Array对象时,元素的个数是不确定的,用户可以在赋值时任意定义;第2个语法指定的数组的长度,在对数组赋值时,元素个数不能超过其指定的长度;第3个语法是在定义时,对数组对象进行赋值,其长度为数组元素的个数。
2.4.3 Date对象
1.创建Date对象
日期对象是对一个对象数据类型求值,该对象主要负责处理与日期和时间有关的数据信息。在使用Date对象前,首先要创建该对象。
语法:
dateObj = new Date(); dateObj = new Date(dateVal); dateObj = new Date(year, month, date[, hours[, minutes[, seconds[, ms]]]]);
Date对象语法中各参数的说明如表2.3所示。
表2.3 Date对象的参数说明
2.Date对象的属性
Date对象的属性有constructor和prototype,下面介绍这两个属性的用法。
(1)constructor属性
例如,判断当前对象是否为日期对象。代码如下:
var newDate=new Date(); if (newDate.constructor==Date) document.write("日期型对象");
运行结果:日期型对象。
(2)prototype属性
例如,用自定义属性来记录当前日期是本周的周几。代码如下:
var newDate=new Date(); //当前日期为2014-12-23 Date.prototype.mark=null; //向对象中添加属性 newDate.mark=newDate.getDay(); //向添加的属性中赋值 alert(newDate.mark);
运行结果:2。
3.Date对象的方法
Date对象是JavaScript的一种内部数据类型。该对象没有可以直接读写的属性,所有对日期和时间的操作都是通过方法完成的。Date对象的方法如表2.4所示。
表2.4 Date对象的方法
续表
【例2.5】输出日期中的年月日。(实例位置:光盘\TM\sl\2\5)
创建一个名称为index.html的文件,在该文件的<head>编写如下语句输出当天日期的年月日:
<script language="javascript"> var day=new Date(); //当天日期 document.write("今天是"+day.getFullYear()+"年"+(day.getMonth()+1)+"月"+day.getDate()+"日"); //输出 当天日期的年月日 </script>
运行结果如图2.23所示。
图2.23 输出当天日期
2.4.4 String对象
String对象是动态对象,需要创建对象实例后才能引用该对象的属性和方法,该对象主要用于处理或格式化文本字符串以及确定和定位字符串中的子字符串。
1.创建String对象
String对象用于操纵和处理文本串,可以通过该对象在程序中获取字符串长度、提取子字符串,以及将字符串转换为大写或小写字符。
语法:
var newstr=new String(StringText);
参数说明:
newstr:创建的String对象名。
StringText:可选项。字符串文本。
例如,创建一个String对象。
var newstr=new String("欢迎使用JavaScript脚本");
事实上任何一个字符串常量(用单引号或双引号括起来的字符串)都是一个String对象,可以将其直接作为对象来使用,只要在字符变量的后面加“.”,便可以直接调用String对象的属性和方法。字符串与String对象的不同在于返回的typeof值,前者返回的是stirng类型,后者返回的是object类型。
2.String对象的属性
在String对象中有3个属性,分别是length、constructor和prototype。下面对这几个属性进行详细介绍。
(1)length属性
该属性用于获得当前字符串的长度。
语法:
stringObject.length
参数说明:
stringObject:当前获取长度的String对象名,也可以是字符变量名。
例如,获取已创建的字符串对象“abcdefg”的长度。代码如下:
var p=0; var newString=new String("abcdefg"); //实例化一个字符串对象 var p=newString.length; //获取字符串对象的长度 alert(p.toString(16)); //用提示框显示长度值
运行结果:7。
例如,获取自定义的字符变量“abcdefg”的长度。代码如下:
var p=0; var newStr="abcdefg"; //定义一个字符串变量 var p=newStr.length; //获取字符变量的长度 alert(p.toString(16)); //用提示框显示字符串变量的长度值
运行结果:7。
(2)constructor属性
该属性用于对当前对象的函数的引用。
语法:
Object.constructor
参数说明:
Object:String对象名或字符变量名。
例如,使用constructor属性判断当前对象或自定义变量的类型。代码如下:
var newName=new String("sdf"); //实例化一个字符串对象 if(newName.constructor==String) //判断当前对象是否为字符型 { alert("this is String"); //如果是字符型,显示提示框 }
运行结果:this is String。
说明
以上例子中的newName对象,可以用字符串变量代替。该属性是一个公共属性,在Array、Date、Boolean和Number对象中都可以调用该属性,用法与String对象相同。
例如,可以利用constructor属性获取当前对象fred所引用的函数代码。
function chronicle(name, year) //自定义函数 { this.name=name; //给当前函数的name属性传值 this.year=year; //给当前函数的year属性传值 } var fred=new chronicle("Year",2007); //实例化chronicle函数的对象 alert(fred.constructor); //显示对象中的函数代码
运行结果:function chronicle(name, year) { this.name=name; this.year=year; }。
(3)prototype属性
该属性可以为对象添加属性和方法。
语法:
object.prototype.name=value
参数说明:
object:对象名或字符变量名。
name:要添加的属性名。
value:添加属性的值。
例如,给information对象添加一个自定义属性salary,并给该属性赋值(1700)。代码如下:
function personnel(name, age) //自定义函数 { this.name=name; //给当前函数的name属性传值 this.age=age; //给当前函数的age属性传值 } var information=new personnel("张*租",27); //实例化personnel函数对象 personnel.prototype.salary=null; //向对象中添加属性 information.salary=1700; //向添加的属性中赋值 alert(information.salary); //在提示框中显示添加的属性值
运行结果:1700。
说明
该属性也是一个公共属性,在Array、Date、Boolean和Number对象中都可以调用该属性,用法与String对象相同。
3.String对象的方法
String对象的方法如表2.5所示。
表2.5 String对象的方法
【例2.6】使用String对象的方法处理字符串。(实例位置:光盘\TM\sl\2\6)
创建一个名称为index.html的文件,在该文件的<head>编写如下语句处理字符串:
<script language="javascript"> var str=new String("最特别的存在"); //定义原始字符串 document.write("原始字符串:"+str+"<br/><br/>"); //显示原始字符串 document.write("大号字体显示的字符串:"+str.big()+"<br/><br/>"); //大号字体显示字符串 document.write("粗体显示的字符串:"+str.bold()+"<br/><br/>"); //粗体显示字符串 document.write("指定颜色显示的字符串:"+str.fontcolor("red")); //设置字符串为红色 </script>
运行结果如图2.24所示。
图2.24 使用String对象的方法处理字符串