Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯系 :: 聚合  :: 管理

          OO的JavaScript并不高深,麻煩就麻煩在google出來的國人介紹文章經常羅羅嗦嗦,而且之間的說法還各有不同,擺在一起就讓人看了頭大。
          這里重拾簡單主義,以一個最簡單的例子把OO Javascript說明白。

          1.一個頗為精簡的例子

          只需理解三個關鍵字:
          第一個是function ,JS世界里Class的定義用"function",function里面的內容就是構造函數的內容。

          第二個是this指針,代表調用這個函數的對象。

          第三個是prototype,用它來定義成員函數, 比較規范和保險。
          //定義Circle類,擁有成員變量r,常量PI和計算面積的成員函數area()
          function Circle(radius)

              this.r = radius;
          }
          Circle.PI = 3.14159;
          Circle.prototype.area = function(  ) {return Circle.PI * this.r * this.r;}
          //使用Circle類
          var c = new Circle(1.0);  
          alert(c.area());
          另外成員函數定義還可以寫成這樣:
          function compute_area(){return Circle.PI * this.r * this.r;}
          Circle.prototype.area=compute_area;

          2.繼承

          注意兩點
          1.定義繼承關系 ChildCircle.prototype=new Circle(0); 其中0是占位用的
          2.調用父類的構造函數
               this.base=Circle;
               this.base(radius);
          //定義ChildCircle子類
          function ChildCircle(radius)

               this.base=Circle;
               this.base(radius);
          }

          ChildCircle.prototype=new Circle(0);
          function Circle_max(a,b)
          {
              if (a.r > b.r) return a;

              else return b;
          }
          ChildCircle.max = Circle_max;
          //使用ChildCircle子類
          var c = new ChildCircle(1);
          var d = new ChildCircle(2);  
          var bigger = d.max(c,d);
          alert(bigger.area());

          3.var式定義
          JS還支持一種var Circle={raidus:1.0,PI:3.1415}的形式,語法就如CSS的定義。
          因此如果Circle只有一個實例,下面的定義方式更簡潔:
          var newCircle=
          {
          r:1.0,
          PI:3.1415,
          area: function(){ return this.PI * this.r * this.r;}
          };
          alert(newCircle.area());
          BTW.吃飽了撐著可以看看Rails帶的OO Javascript庫--Prototype
          其實,Javascript現在的語法真的不適合那么別扭的寫成OO模式....



          本文轉自 http://calvin.javaeye.com/blog/92013
          posted on 2009-09-10 16:02 calvin 閱讀(195) 評論(0)  編輯  收藏 所屬分類: JavaScript

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


          網站導航:
           
          主站蜘蛛池模板: 兰西县| 蓝山县| 灯塔市| 新丰县| 双柏县| 长丰县| 容城县| 南平市| 江油市| 太仆寺旗| 安阳县| 张家界市| 新津县| 楚雄市| 北碚区| 进贤县| 庐江县| 鄂托克前旗| 宝清县| 平原县| 灯塔市| 双江| 巫山县| 湖南省| 南漳县| 北京市| 渭源县| 彭泽县| 天峻县| 云浮市| 泰宁县| 鄂尔多斯市| 五家渠市| 郁南县| 枣庄市| 荔波县| 沧州市| 莒南县| 吐鲁番市| 宁武县| 新泰市|