五. 对象应用例程
再演示另一个关于Thermometer(温度计)对象的例子,它负责将不同的温度刻度进行转换:
<script language="JavaScript">
// constructor
function Thermometer(degrees, scale)
{
// methods
this.convertToCelsius = convertToCelsius;
this.convertToFahrenheit = convertToFahrenheit;
this.raiseTemp = raiseTemp;
// action to take
if (scale == "f" || scale == "F")
{
this.scale = scale;
this.degreesF = degrees;
this.degreesC = 0;
this.convertToCelsius();
}
else
{
this.scale = scale;
this.degreesF = 0;
this.degreesC = degrees;
this.convertToFahrenheit();
}
}
// conversion functions
function convertToCelsius()
{
this.degreesC = (5.0/9.0) * (this.degreesF - 32.0);
}
function convertToFahrenheit()
{
this.degreesF = ((9.0/5.0) * this.degreesC) + 32.0;
}
// method to raise temperature
function raiseTemp(num)
{
this.degreesF += num;
this.degreesC += num;
}
</script>
以上代码的含义是:构造器创建了一个对象,用一个温度和温度刻度对其进行初始化,然后运行转换函数来获取在另一种刻度下等值的温度。其中包含了一个 raiseTemp() 方法,以演示对象属性是如何修改的。
以下代码演示了如何在 HTML 文档中使用对象:
<script language="JavaScript">
// create an object instance
a = new Thermometer(98.6, "f");
// access object properties
alert("Temperature in Fahrenheit is " + a.degreesF);
alert("Temperature in Celsius is " + a.degreesC);
// execute object methods
a.raiseTemp(10);
alert("Temperature in Fahrenheit is " + a.degreesF);
alert("Temperature in Celsius is " + a.degreesC);
</script>
六. 传递对象参数
同可以向一个对象传递参数一样,也可以把对象传递给另一个对象。请看看以下的例子,其中包含两个对象构造器,设置第二个的目的是把一个对象作为参数来接收:
<script language="JavaScript">
// Room object
// accepts area (sq. ft.) and colour (walls) as parameters
function Room(area, colour)
{
this.area = area;
this.colour = colour;
}
// House object
// accepts price as parameter
function House(price, room)
{
this.price = price;
this.obj = room;
}
</script>
再看看如何使用它:
<script language="JavaScript">
Kitchen = new Room(500, "white");
DiningRoom = new Room(600, "white");
RedGables = new House(89000, Kitchen);
alert(RedGables.obj.area);
</script>
在这种情况下,新创建的Room对象的例示 "Kitchen"被传递给 House 对象 "RedGables"。使用一种分级结构,就可能通过House对象一直深入到Room对象并获取一个特定对象属性的值。这与许多DOM 对象的使用方法是相同的。
七. 获取及修改构造器信息
关于 JavaScript对象还有其它一些有趣的东西。比如,可以通过属性constructor(构造器)来获取一个对象的完整信息。以下例子演示了如何将其应用在 Sumthing对象构造器中:
<script language="JavaScript">
alpha = new Sumthing(23, 865);
alert("The object constructor for alpha is " + alpha.constructor);
</script>
另外,还可以使用 prototype关键字向一个已经存在的对象中增加新的对象属性。比如,以下代码向刚才的Room 对象中增加属性:
<script language="JavaScript">
// Room object
// accepts area (sq. ft.) and colour (walls) as parameters
function Room(area, colour)
{
this.area = area;
this.colour = colour;
}
Room.prototype.direction = "east";
</script>
以上代码运行后,将向Room对象构造器中增加了一个叫做direction的对象属性,它的值为east。接着,试一试存取这个对象属性:
<script language="JavaScript">
Kitchen = new Room(1000, "green");
alert(Kitchen.direction);
</script>
最后,还可以用prototype关键字来增加对象方法。