UML软件工程组织

Ajax基础教程 - 5.7.4 汇合
作者:(美)阿斯利森 舒塔   出处:csdn

5.7.4 汇合

前面已经了解到,JavaScript中也可以实现私有属性,而且JavaScript也能像C++和Java一样支持基于类的继承方法。为了展示这些是怎样实现的,下面说明如何转换前面使用Vehicle、SportsCar和CementTruck对象的示例,从而使用信息隐藏和继承的新模式。代码清单5-5列出了新的对象定义。

代码清单5-5 classicalInheritance.js

 

function Vehicle() {

    var wheelCount = 4;

    var curbWeightInPounds = 4000;

 

    this.getWheelCount = function() {

        return wheelCount;

    }

 

    this.setWheelCount = function(count) {

        wheelCount = count;

    }

 

    this.getCurbWeightInPounds = function() {

        return curbWeightInPounds;

    }

 

    this.setCurbWeightInPounds = function(weight) {

        curbWeightInPounds = weight;

    }

 

    this.refuel = function() {

        return "Refueling Vehicle with regular 87 octane gasoline";

    }

 

    this.mainTasks = function() {

        return "Driving to work, school, and the grocery store";

    }

}

 

function SportsCar() {

    this.refuel = function() {

        return "Refueling SportsCar with premium 94 octane gasoline";

    }

 

    this.mainTasks = function() {

        return "Spirited driving, looking good, driving to the beach";

    }

}

 

function CementTruck() {

    this.refuel = function() {

        return "Refueling CementTruck with diesel fuel";

    }

 

    this.mainTasks = function() {

        return "Arrive at construction site, extend boom, deliver cement";

    }

}

需要注意,SportsCar和CementTruck对象没有定义自己的wheelCount和curbWeightInPounds属性,也没有相关的存取函数,因为这些属性和函数会从Vehicle对象继承。

与前面一样,需要一个简单的HTML页面来测试这些新对象。代码清单5-6列出了测试这些新对象的HTML页面。要特别注意createInheritance函数,看看如何使用这个函数在Vehicle和SportsCar对象之间以及Vehicle和CementTruck对象之间创建继承关系。还要注意describe函数有所修改,以试图直接访问wheelCount和curbWeightInPounds属性。这样做会返回一个undefined值。

代码清单5-6 classicalInheritance.html

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Classical Inheritance in JavaScript</title>

 

<script type="text/javascript" src="classicalInheritance.js"></script>

 

<script type="text/javaScript">

function createInheritance(parent, child) {

    var property;

    for(property in parent) {

        if(!child[property]) {

            child[property] = parent[property];

        }

    }

}

 

function describe(vehicle) {

    var description = "";

    description = description + "Number of wheels (via property): "

                                                          + vehicle.wheelCount;

    description = description + "\n\nNumber of wheels (via accessor): "

                                  + vehicle.getWheelCount();

    description = description + "\n\nCurb Weight (via property): "

                                  + vehicle.curbWeightInPounds;

    description = description + "\n\nCurb Weight (via accessor): "

                                 + vehicle.getCurbWeightInPounds();

    description = description + "\n\nRefueling Method: " + vehicle.refuel();

    description = description + "\n\nMain Tasks: " + vehicle.mainTasks();

    alert(description);

}

 

function createVehicle() {

    var vehicle = new Vehicle();

    describe(vehicle);

}

 

function createSportsCar() {

    var sportsCar = new SportsCar();

    createInheritance(new Vehicle(), sportsCar);

    sportsCar.setCurbWeightInPounds(3000);

    describe(sportsCar);

}

 

function createCementTruck() {

    var cementTruck = new CementTruck();

    createInheritance(new Vehicle(), cementTruck);

    cementTruck.setWheelCount(10);

    cementTruck.setCurbWeightInPounds(10000);

    describe(cementTruck);

}

</script>

</head>

 

<body>

  <h1>Examples of Classical Inheritance in JavaScript</h1>

 

  <br/><br/>

  <button onclick="createVehicle();">Create an instance of Vehicle</button>

 

  <br/><br/>

  <button onclick="createSportsCar();">Create an instance of SportsCar</button>

 

  <br/><br/>

  <button onclick="createCementTruck();">Create an instance of CementTruck</button>

 

</body>

</html>

分别点击页面上的各个按钮会得到图5-17所示的结果。正如所料,试图直接访问私有属性就会返回undefined。


图5-17 创建Vehicle、SportsCar和CementTruck对象,并使用describe函数描述它们的结果。私有属性不能直接访问,见警告框中的undefined值

上一页     首页    下一页

 

版权所有:UML软件工程组织