Ajax - JavaScript之实现私有属性、像C++和Java一样支持基于类的继承方法之例子

5.7.4  汇合
前面已经了解到,JavaScript中也可以实现私有属性,而且JavaScript也能像C++和Java一样支持基于类的继承方法。为了展示这些是怎样实现的,下面说明如何转换前面使用 VehicleSportsCarCementTruck对象的示例,从而使用信息隐藏和继承的新模式。代码清单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函数,看看如何使用这个函数在 VehicleSportsCar对象之间以及 VehicleCementTruck对象之间创建继承关系。还要注意 describe函数有所修改,以试图直接访问 wheelCountcurbWeightInPounds属性。这样做会返回一个 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 οnclick="createVehicle();">Create an instance of Vehicle</button>
 
  <br/><br/>
  <button οnclick="createSportsCar();">Create an instance of SportsCar</button>
 
  <br/><br/>
  <button οnclick="createCementTruck();">Create an instance of CementTruck</button>
 
</body>
</html>
分别点击页面上的各个按钮会得到图5-17所示的结果。正如所料,试图直接访问私有属性就会返回 undefined
图5-17 创建Vehicle、SportsCar和CementTruck对象,并使用describe函数描述它们的结果。私有属性不能直接访问,见警告框中的undefined值

 

原书链接:http://book.csdn.net/bookfiles/11/100117058.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值