小秋的家

          home

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            1 Posts :: 91 Stories :: 17 Comments :: 0 Trackbacks

                  javascript面向?qū)ο缶幊虒崿F(xiàn):
                      1.類的聲明:
                          function test1(){
                              this.p1 = "p1";
                              this.p2 = "p2";
                              this.f1 = function(){ alert("f1"); }
                              this.f2 = function(){ akert("f2"); }
                          }
                          上面的代碼聲明了兩個公有的屬性p1和p2,兩個方法f1和f2.
                          如何申明私有變量呢?
                          function test1(){
                              var _test = "test";
                              this.p1 = "p1";
                              this.p2 = "p2";
                              this.f1 = function(){ alert("f1"); }
                              this.f2 = function(){ akert("f2"); }
                          }
                          上面的代碼通過var關鍵字聲明了一個局部變量_test,其作用域是test1類定義的內(nèi)部,對外不公開.
                          如何申明類的靜態(tài)變量和靜態(tài)方法呢?
                          test1.staticProp = "static var";
                          test1.staticMethod = function(){
                              alert("static method");
                          }
                          還可以通過javascript中對象的prototype屬性來申明類的實例屬性或方法:
                          test1.prototype.prop2 = "prop2";
                          test2.prototype.method2 = function(){
                              alert(" this.prop2");
                          }
          `               利用prototype屬性,可以實現(xiàn)另一種類的聲明方法:
                          function test(){}
                          test.prototype = {
                              p1 : "p1",
                              p2 : "p2",
                              f1 : function(){
                                  alert("f1");
                              }
                            }
                          
                          如何實現(xiàn)類的繼承呢?通過復制父類的所有屬性和方法來實現(xiàn)子類的繼承:
                          用for(....in ....)方法來實現(xiàn)遍歷父類所有的屬性和方法
                          這里看看我如何讓新聲明的test1類繼承test類的:
                          function test1(){}//定義新聲明的test1類.
                          var p;                
                          for(p in test.prototype){    //遍歷父類的所有屬性和方法
                              test1.prototype[p] = test.prtotype[p];   //把父類的所有屬性和方法全部復制到新聲明的子類test1中
                          }
                          test1.prototype.newMethod = function(){//定義新聲明的子類test1的新方法
                              alert("new method");
                          }
                          其實prototype框架已經(jīng)幫我們實現(xiàn)了這種繼承,我們來看看它是如何實現(xiàn)的:
                          Object.extend = function(destination, source){
                              for(property in source){
                                  destination[property] = source[property];
                              }
                              return destination;
                           }
                          Prototype框架為Object對象定義了extend方法,該方法有兩個參數(shù)destination和source,分別對應于子類和父類,所以我們前面所講的test1繼承test可以簡化代碼如下:
                           function test1(){
                              test1.prototype = Object.extend({
                                  newMethod : function(){
                                      alert("new method");
                                  }
                              },
                              test.prototype
                          );
                      
                          如果我們改變一下上述代碼中extend方法中的兩個參數(shù)的順序:
                         function test1(){
                              test1.prototype = Object.extend(
                                  test.prototype,
                                  {
                                  newMethod : function(){
                                      alert("new method");
                                  }
                              },
                          );  
                             可以發(fā)現(xiàn),對于test1子類來說效果是相同的..
                              但是,我們進一步會發(fā)現(xiàn),父類test確擁有了子類test1的新增方法,雖然這不是我們最初想要的繼承效果,但是這種方法卻使我們有了擴展對象屬性或者方法的手段了,不是嗎?

          posted on 2008-08-27 14:53 棋劍小秋 閱讀(159) 評論(0)  編輯  收藏 所屬分類: AJAX
          主站蜘蛛池模板: 高安市| 汉源县| 东港市| 新丰县| 巫山县| 平和县| 中方县| 沁水县| 许昌县| 水城县| 四子王旗| 蒙城县| 清流县| 长汀县| 泗阳县| 南阳市| 明水县| 饶河县| 吴桥县| 肃宁县| 喜德县| 长顺县| 建始县| 松溪县| 大化| 象州县| 永吉县| 黄龙县| 东方市| 阿拉善右旗| 都昌县| 襄汾县| 饶平县| 内丘县| 郧西县| 宜州市| 施甸县| 小金县| 麟游县| 哈巴河县| 盱眙县|