日期:2009-03-20  浏览次数:20936 次

  五. 对象应用例程

  再演示另一个关于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关键字来增加对象方法。