隨筆-9  評論-3  文章-0  trackbacks-0

          1. 偽類(Pseudoclassical)
          簡單的說,偽類就是通過定義一個構(gòu)造函數(shù)并擴充它的prototype來實現(xiàn)的。

          <html>
          <head>
          <title>test</title>
          <script>
              
          function test(){
                  
          var Father = function(firstName){
                      
          this.firstName = firstName;
                  }
          ;

                  Father.prototype.name 
          = function(){
                      
          return this.firstName;
                  }
          ;

                  
          var Son = function(firstName, lastName){
                      
          this.firstName = firstName;
                      
          this.lastName = lastName;
                  }
          ;

                  Son.prototype 
          = new Father();

                  Son.prototype.name 
          = function(){
                      
          return this.firstName + " " + this.lastName;
                  }

                  
                  
          var aSon = new Son("San""Zhang");
                  alert(aSon.name()); 
          // San Zhang
              }

          </script>
          <body onload="test()">
          </body>
          </head>
          </html>


          可以看出,這種方法是沒有私有屬性的,并且不能訪問父類的方法。

          2. 原型(Prototypal)
          利用原型方式來實現(xiàn)繼承,就摒棄了偽類中向“類”這種方式靠攏的方法,而是用純粹的對象來實現(xiàn)。

          <html>
          <head>
          <title>test</title>
          <script>
              
          function test(){
                  
          var aFather = {
                      firstName: 
          "San",
                      lastName: 
          "Zhang",
                      getName: 
          function(){
                          
          return this.firstName + " " + this.lastName;
                      }

                  }
          ;

                  
          var Son = function(){};
                  Son.prototype 
          = aFather;

                  
          var aSon = new Son();
                  aSon.firstName 
          = "XiaoSan";
                  alert(aSon.getName()); 
          // XiaoSan Zhang
                  alert(Son.prototype.getName()); // San Zhang
              }

          </script>
          <body onload="test()">
          </body>
          </head>
          </html>


          可以看出,現(xiàn)在的繼承是純粹的對象與對象間的了,不過還有個問題,這個方式依然沒有解決屬性隱藏。

          3. 函數(shù)化(Functional)
          使用函數(shù)化方法可以通過閉包有效的實現(xiàn)信息隱藏,不過看起來就沒有原型方式直觀了。

          <html>
          <head>
          <title>test</title>
          <script>
              
          function test(){
                  
          var father = function(firstName, lastName){
                      
          var instance = {};

                      
          // 對外暴露的方法,此時firstName和lastName等于被隱藏了
                      instance.getFirstName = function(){
                          
          return firstName;
                      }
          ;

                      instance.getLastName 
          = function(){
                          
          return lastName;
                      }
          ;

                      instance.getName 
          = function(){
                          
          return firstName + " " + lastName;
                      }
          ;

                      
          return instance;
                  }
          ;
                  
                  
          var son = function(firstName, lastName){
                      
          // 這里就像OO語言一樣,先調(diào)用父類的構(gòu)造函數(shù)
                      var instance = father(firstName, lastName);
                      
                      
          // 擴充方法,這里可以直接使用“父類”的方法,不過屬性已經(jīng)變化了
                      instance.nickname = function(){
                          
          return "Little " + instance.getLastName();
                      }
          ;
                      
                      
          return instance;
                  }

                  
                  
          var aFather = father("San""Zhang");
                  
          var aSon = son("XiaoSan""Zhang");
                  alert(aFather.getName()); 
          // San Zhang
                  alert(aSon.getName()); // XiaoSan Zhang
                  alert(aSon.nickname()); // Litttle Zhang
              }

          </script>
          <body onload="test()">
          </body>
          </head>
          </html>
          posted on 2010-10-09 10:28 臭美 閱讀(276) 評論(0)  編輯  收藏 所屬分類: The Book of Eli

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 家居| 登封市| 宁陕县| 镇平县| 修武县| 墨脱县| 化隆| 聂拉木县| 鄂尔多斯市| 舒城县| 灵石县| 昭苏县| 定州市| 买车| 北京市| 孟村| 华坪县| 余庆县| 冕宁县| 汉川市| 陆河县| 汝州市| 铜陵市| 南安市| 彩票| 双流县| 灌云县| 如东县| 天全县| 长沙市| 扬州市| 开江县| 沽源县| 双江| 曲阳县| 长垣县| 城固县| 台州市| 汕尾市| 华蓥市| 富民县|