在面向对象的程序设计语言中,共有的概念是强类型和支持以类为基础的继承机制.根据这个评判标准,很容易就能够将JavaScript从真正的面向对象语言中区分出来.但是,我们又会发现JavaScript大量地使用了对象,而且它还有自己的以原型对象为基础的继承机制,这些又说明JavaScript是一种真正的面向对象语言.它从大量其他的面向对象语言中获取了灵感,这些语言采取以原型对象为基础的继承机制,而不是采用以类为基础的继承机制.
虽然JavaScript不是一种以类为基础的面向对象程序设计语言,但是它在模拟像Java和C++这样的以类为基础的语言时是相当出色的.
对象是一个数据结构,包含各种命名了的数据段,而且还能包含对这些数据段进行操作的各种方法.JavaScript中的对象可以具有大量的属性,而且还可以动态地将这些属性添加到对象中.这在像Java和C++这样的强类型语言中是做不到的.在那些语言中,每个对象都有一套预定义的属性,而且每个属性都有有预定义的类型.在使用JavaScript在对象来模拟面向对象的程序设计方法时,通常是给每个对象预定义一套属性以及这些属性的数据类型.
在Java和C++中,类定义了对象的结构,类确定了一个对象包含有哪些域(字段)以及每个域包含什么样的数据类型.类也定义了对对象进行操作的方法.虽然JavaScript并没有正式的类的概念,但是我们可以用构造函数和原型对象模拟出类来.
一个Java类的成员有四种可能的基本类型:实例属性,实例方法,类属性以及类方法.那么在JavaScript中是如何模拟它们的呢? 请看下面的代码:
1
<html>
2
<head><title>类成员</title></head>
3
<body>
4
<script language="javascript">
5
// 真正基于类的面向对象语言中,类有四种基本成员:
6
// 实例属性,实例方法,类属性,类方法。
7
// JavaScript虽不是基于类的语言,也没有类的概念,但是它可以模拟出面向对象的设计
8
9
function Circle(radius){ //这个构造函数定义了类自身。
10
//r是构造函数定义并初始化的一个实例属性
11
this.r = radius;
12
}
13
14
//Circle.PI是一个类属性,它是构造函数的一个属性。
15
Circle.PI = 3.14159;
16
17
//以下的函数将计算圆的面积。
18
function Circle_Area(){
19
return Circle.PI * this.r * this.r;
20
}
21
22
//下面通过把函数赋给构造函数的原型对象使它成为一个实例方法。
23
//记住,在Circle构造函数中,我们可以用函数直接量定义一个无需命名为Circle_Area的函数。
24
Circle.prototype.area = Circle_Area;
25
26
//以下是另一个函数,它以两个Circle对象作为这际参数,并
27
//返回其中较大的一个(取半径较大的实际参数)
28
function Circle_Max(a, b){
29
if (a.r > b.r)
30
{
31
return a;
32
}
33
else
34
{
35
return b;
36
}
37
}
38
39
//由于该函数比较的是两个Circle对象,所以将它看作为对个别Circle对象进行操作的实例方法,是没有意义的。
40
//但是我们不希望它成为一个独立的函数,所以我们把它赋予一个构造函数,使它成为类方法。
41
Circle.max = Circle_Max;
42
43
// 下面的代码使用了Circle对象的各个成员:
44
45
var c = new Circle(1); //创建Circle类的一个实例。
46
c.r = 4; //设置实例属性r。
47
var a = c.area(); //调用实例方法area();
48
var x = Circle.PI; //调用类属性。
49
var d = new Circle(2); //创建另一个Circle实例。
50
var bigger = Circle.max(c, d);//使用类方法。
51
52
var msg = "实例c的半径为: " + c.r + "\n\r" +
53
"实例c的面积为: " + a + "\n\r" +
54
"类的PI值: " + x + "\n\r" +
55
"调用类的方法,求出两个圆中最大的一个的半径为:" + bigger.r;
56
alert(msg);
57
58
</script>
59
</body>
60
</html>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
----摘录之《JavaScript权威指南》