JavaScript程序设计——第3章 对象基础

3.1 面向对象术语

对象(object)定义为属性的无序集合,每个属性存放一个原始值、对象或函数。

每个对象都由类定义,程序使用类创建对象时,生成的对象叫类的实例(instance)。由类创建对象实例的过程叫实例化(instantiation)。

对象定义存放在一个函数——构造函数(constructor中。

 

3.1.1 面向对象语言的要求

一种面向对象语言有四种基本能力:

1)封装——把相关的信息存储在对像中的能力。

2)聚集——把一个对象存储在另一个对象内的能力。

3)继承——由另一个类得来类的属性和方法的能力。

4)多态——编写能以多种方法运行的函数或方法的能力。

 

3.1.2 对象的构成

ECMAScript中,对象由特性(attribute)构成,特性可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看作成对象的方法(method),否则该特性被看作是属性(property)。

 

3.2 对象应用

对象的创建或销毁都在JavaScript执行过程中发生,理解这种范式的含义对理解整个语言至关重要。

 

3.2.1 声明(Declaration)和实例化(Instantiation

对象使用关键字new后跟要实例化的类的名字创建的:

var StringObject=new Object();

上述代码创建了Object类的一个实例,并把它存储在变量StringObject中。

 

3.2.2 对象引用(Object Reference

不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。

 

3.2.3 对象废除(Dereferencing Object

ECMAScript有无用存储单元收集程序(garbage collection routine),意味着不必专门销毁对象来释放内存。当再没有对对象的引用时,称该对象被废除(dereference)了。每当函数执行完它的代码,无用存储单元收集程序就会运行,释放所有的局部变量。还可以把对象的所有引用都设置为null,这样可以强制性的废除对象。如果一个对象有两个或更多引用,则要正确废除该对象,必须将其所有引用都设置为null

 

3.2.4 早绑定(early binding)和晚绑定(late binding)

绑定,即把对象的接口与对象的实例结合在一起的方法。

早绑定是指在实例化对象之前定义它的特性和方法,这样编译器或解释程序就能提前转换机器代码。ECMAScript中部支持早绑定。

晚绑定指的是编译器或解释程序在运行前,不知道对象的类型。ECMAScript中所有变量都采用晚绑定。

 

 

3.3 对象的类型

 

3.3.1 本地对象(Native Object

本地对象就是ECMA-262中定义的类(引用类型)。包括

Object

Function

Array

String

Boolean

Number

Date

RegExp

Error

EvalError

RangeError

ReferenceError

SyntaxError

TypeError

URIError

 

现在介绍两种重要的本地对象ArrayDate

1.Array

可以用如下方式创建Array对象:

var arrayValue=new Array();

var arrayValue=new Array(20);//定义一个20个项的数组

var arrayValue=new Array(”red”,”green”,”blue”);//创建一个有3个字符串的数组

数组最多可以存放4294967295项,如要添加更多项,会发生异常。

 

还可以用字面量表示定义Array对象,即用方括号([]),用逗号分隔值。如:

var arrayValue=[”red”,”green”,”blue”];

方括号的作用是暗示把其中的值存放在Array对象中,用这种方式与用传统方式声明的数组相同。

Array类的一些方法和属性:

l   length——返回数组项的个数。

l   toString()valueOf()方法——Array对象覆盖了这两个方法,返回特殊的字符串。调用这两个方法,将返回用逗号把每个数组项连接在一起的字符串。如下例:

var Colors=[“red”,”green”,”blue”];

alert(Colors.toString());//输出 red,green,blue

alert(Colors.valueOf());//输出 red,green,blue

l   toLocaleString()方法——返回的是由数组项构成的字符串。与toString()valueOf()方法的区别是得到的值是通过调用每个数组项的toLocaleString()方法得到的。大多数情况下,该方法返回的值与toString()valueOf()方法是一样的。

l   join()方法——返回用指定的符号连接的数组项构成的字符串。有一个参数,即数组项之间使用的字符串。如下例:

var Colors=[“red”,”green”,”blue”];

alert(Colors.join(“,”));//输出 red,green,blue

alert(Colors.join(“-sping-”));//输出 red-sping-green-sping-blue

l   split()方法——把字符串转换成数组。有一个参数,就是被看作数组项之间的分隔符的字符串。如下:
var Colors=”red,green,blue”;
var Colors=Colors.split(“,”);

concat()方法——与String类的concat()方法相似,参数被附加在数组末尾,返回的函数值是新的Array对象(包括原始数组中的项和新的项)。如:
var Colors=[“red”,”green”,”blue”];
var Colors2=Colors.concat(“yellow”,”purple”);
alert(Colors2.toString());//
输出 red,green,blue,yellow,purple
alert(Colors.toString());//
输出 red,green,blue

l   slice()方法——与String类中的该方法非常相似,返回的是具有特定项的新数组。该方法接受一个或两个参数,即要提取的项的起始位置和结束位置。如果只有一个参数,该方法返回从该位置开始到数组结尾的所有项。如果有两个参数,该方法返回第一个位置和第二个位置间的所有项,不包括第二个位置处的项。
var Colors=[“red”,”green”,”blue”
“yellow”,”purple”];
var Colors2=Colors.slice(1);
var Colors3=Colors.slice(1
4);
alert(Colors2.toString());//
输出
green,blue,yellow,purple
alert(Colors3.toString());//
输出 green,blue,yellow

l   push()pop()方法——这两个方法使Array对象的动作类似一个栈,所以push()方法用于在Array结尾添加一个或多个项,pop()方法用于删除最有一个数组项(length-1),并返回它作为函数值。

l   shift()unshift()方法——这两个方法是用来操作第一项的方法。shift()方法将删除数组中的第一个项,将其作为函数值返回。unshift()方法把一个项放在数组的第一个位置,然后余下的项向下移动一个位置。

l   reverse()方法——颠倒数组项的顺序。

l   sort()方法——根据数组项的值按升序为它们排序。要进行这种排序,首先会将所有值转换成字符串,然后根据字符代码比较数组项。

l   splice()方法——把数据项插入到数组的中部。

   

2.Date

ECMAScript把日期存储为距离UTCUniversal Time Code,通用时间代码)时间197011日凌晨12点的毫秒数。

可用4种方法创建Date对象:

1var d=new Date()//用当前日期和时间创建Date对象

2var d=new Date(0);//用距离197011日凌晨12点的毫秒数创建

3)用parse()方法创建。该方法接受字符串为参数,把该字符串转换为日期值(即毫秒表示)。如果该字符串不能转换成日期,该函数返回NaN

3)用UTC()方法创建。它的参数是日期中的年、月、日、小时、分、秒、毫秒。其中,必须声明年和月。

Date类的其余方法:

 

 

toString()

返回由实现特定的字符串,采用人们可读懂的格式

valueOf()

返回日期的毫秒数表示

toDateString()

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

toTimeString()

以实现的特定的格式显示Date的时间部分(即小时、分、秒和时区)

toLocaleString()

以地点特定的格式显示Date的日期和时间

toLocaleDateString()

以地点特定的格式显示Date的日期部分

toLocaleTimeString()

以地点特定的格式显示Date的时间部分

toUTCString()

以实现的特定的格式显示DateUTC时间

getTimezoneOffset()

返回当前时区比UTC提前或落后的分钟数,可用来判断时区使用的是否是夏令时

getTime()

返回日期的毫秒表示

setTime(milliseconds)

设置日期的毫秒表示

getFullYear()

返回用四位数表示的日期的年份

getUTCFullYear()

返回用四位数表示的UTC日期的年份

setFullYear()

设置日期的年份,参数必须是四位数的年份值

setUTCFullYear()

设置UTC日期的年份,参数必须是四位数的年份值

getMonth()

返回日期的月份值,由数字01月)到1112月)表示

getUTCMonth()

返回UTC日期的月份值,由数字01月)到1112月)表示

setMonth(month)

设置日期的月份为大于等于0的数字。对于大于11的数字,开始累计年数

setUTCMonth(month)

设置UTC日期的月份为大于等于0的数字。对于大于11的数字,开始累计年数

getDate()

返回该日期该月中的某天

getUTCDate()

返回该UTC日期该月中的某天

setDate()

设置该日期该月中的某天

setUTCDate()

设置该UTC日期该月中的某天

getDay()

返回该日期为星期几

getUTCDay()

返回该UTC日期为星期几

setDay(day)

设置该日期为星期几

setUTCDay(day)

设置该UTC日期为星期几

getHours()

返回日期中的小时值

getUTCHours()

返回UTC日期中的小时值

setHours(hours)

设置日期中的小时值

setUTCHours(hours)

设置UTC日期中的小时值

getMinutes()

返回日期中的分钟值

getUTCMinutes()

返回UTC日期中的分钟值

setMinutes(minutes)

设置日期中的分钟值

setUTCMinutes(minutes)

设置UTC日期中的分钟值

getSeconds()

返回日期中的秒值

getUTCSeconds()

返回UTC日期中的秒值

setSeconds(seconds)

设置日期中的秒值

setUTCSeconds(seconds)

设置UTC日期中的秒值

getMilliseconds()

返回日期中的毫秒值。注意,返回的是当前日期中毫秒值

getUTCMilliseconds()

返回UTC日期中的毫秒值

setMilliseconds(milliseconds)

设置日期中的毫秒值

setUTCMilliseconds(milliseconds)

设置UTC日期中的毫秒值

 

3.3.2 内置对象(Built-in object

内置对象是指由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。这意味着开发者不必明确实例化内置对象,它已被实例化了。标准定义了两个内置对象,每个内置对象都是本地对象。

 

1.Global对象

Global对象不能实例化,在ECMAScript中,不存在单独的函数,所有的函数必须是某个对象的方法。例如前面的parseInt()parseFloat()等,看起来都是独立函数,实际上,都是Global对象的方法,它还有一些其它的方法:

encodeURI()方法用于处理完整的URI,它不对URI中的特殊字符进行编码,如冒号、前斜杠、问好和英镑号,所以它可以处理完整的URI

encodeURIComponent()用于处理URI的一个片断,它对所有非标准字符进行编码,它只能用来处理附加在已有URI末尾的字符串。

decodeURI()decodeURIComponet()方法用于解码编码过的URI

eval()方法接受一个参数,即要执行的字符串代码。例如:eval(“alert(‘hi’)”);

Global对象的一些属性:

属性

说明

undefined

Undefined类型的字面量

NaN

非数的专用数值

Infinity

无穷大值的专用数值

Object

该类型的构造函数

Array

该类型的构造函数

Function

该类型的构造函数

Boolean

该类型的构造函数

String

该类型的构造函数

Number

该类型的构造函数

Date

该类型的构造函数

RegExp

该类型的构造函数

Error

该类型的构造函数

EvalError

该类型的构造函数

RangeError

该类型的构造函数

ReferenceError

该类型的构造函数

SyntaxError

该类型的构造函数

TypeError

该类型的构造函数

URIError

该类型的构造函数

   

2.Math对象

该对象中知道解决最复杂的数学问题的所有公式,如果给它要处理的数字,即能计算出结果。

Math对象的属性:

属性

说明

E

e,自然对数的底

LN10

10的自然对数

LN2

2的自然对数

LOG2E

2为底E的对数

LOG10E

10为底E的对数

PI

值∏

SQRT1_2

1/2的平方根

SQRT2

2的平方根

Math对象的方法:

方法

属性

min()

判断一组数中的最小值

max()

判断一组数中的最大值

abs()

返回数字的绝对值

ceil()

向上舍入函数,总是把数字向上舍入到最接近的值

floor()

向下舍入函数,总是把数字向下舍入到最接近的值

round()

标准的舍入函数,即四舍五入

exp()

Math.E升到指定的幂

log()

返回特定数字的自然对数

pow()

把指定的数字升到指定的幂

sqrt()

返回指定数字的平方根

acos(x)

返回x的反余弦值

asin(x)

返回x的反正弦值

atan(x)

返回x的反正切值

atan2(y,x)

返回y/x的反余弦值

cos(x)

返回x的余弦值

sin(x)

返回x的正弦值

tan (x)

返回x的正切值

random()

返回一个01之间的随机数,不包括01

 

3.3.3 宿主对象(Host object

所有BOMDOM都是宿主对象。

 

3.4 作用域(Scope

变量的适用范围。

 

3.4.1 公用、受保护和私有作用域

公用作用域中的对象属性可以从对象外部访问,即开发者创建对象的实例后,就可使用它的公用属性。

私有作用域中的属性只能在对象内部访问,对外部来说,这些属性并不存在。

受保护作用域用来定义私有的属性和方法,但这些属性和方法可以被子类继承。

ECMAScript中只有公有作用域。

 

3.4.2 静态作用域

静态作用域定义的属性和方法任何时候都能从同一个位置访问。ECMAScript中没有静态作用域。

 

3.4.3 关键字this

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值