沙漠中的魚

          欲上天堂,先下地獄
          posts - 0, comments - 56, trackbacks - 0, articles - 119
            BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

          前面已經了解到,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值

           

          引用:http://book.csdn.net/bookfiles/11/100117058.shtml

          主站蜘蛛池模板: 西平县| 高平市| 湘潭市| 阿瓦提县| 醴陵市| 日喀则市| 临桂县| 东丽区| 桓台县| 凌云县| 泸水县| 玛多县| 偏关县| 长乐市| 招远市| 蒙城县| 金乡县| 连江县| 宣城市| 博野县| 龙井市| 杭锦后旗| 庄河市| 满洲里市| 左权县| 祁连县| 汨罗市| 铁力市| 洱源县| 扎赉特旗| 赤水市| 彰武县| 鄂州市| 女性| 汉寿县| 陆良县| 盐山县| 辉南县| 抚顺县| 宁德市| 佳木斯市|