blog.Toby

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評(píng)論 :: 0 Trackbacks
          ?

          OO的JavaScript并不高深,麻煩就麻煩在google出來(lái)的國(guó)人介紹文章經(jīng)常羅羅嗦嗦,而且之間的說(shuō)法還各有不同,擺在一起就讓人看了頭大。
          這里重拾簡(jiǎn)單主義,以一個(gè)最簡(jiǎn)單的例子把OO Javascript說(shuō)明白。

          1.一個(gè)頗為精簡(jiǎn)的例子

          只需理解三個(gè)關(guān)鍵字:
          第一個(gè)是function ,JS世界里Class的定義用"function",function里面的內(nèi)容就是構(gòu)造函數(shù)的內(nèi)容。

          第二個(gè)是this指針,代表調(diào)用這個(gè)函數(shù)的對(duì)象。

          第三個(gè)是prototype,用它來(lái)定義成員函數(shù), 比較規(guī)范和保險(xiǎn)。

          //定義Circle類,擁有成員變量r,常量PI和計(jì)算面積的成員函數(shù)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());
          另外成員函數(shù)定義還可以寫(xiě)成這樣:
          function compute_area(){return Circle.PI * this.r * this.r;}
          Circle.prototype.area=compute_area;

          2.繼承

          注意兩點(diǎn)
          1.定義繼承關(guān)系 ChildCircle.prototype=new Circle(0); 其中0是占位用的
          2.調(diào)用父類的構(gòu)造函數(shù)?
          ?????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}的形式,語(yǔ)法就如CSS的定義。
          因此如果Circle只有一個(gè)實(shí)例,下面的定義方式更簡(jiǎn)潔:

          var newCircle=
          {
          r:1.0,
          PI:3.1415,
          area: function(){ return this.PI * this.r * this.r;}
          };
          alert(newCircle.area());
          BTW.吃飽了撐著可以看看Rails帶的OO Javascript庫(kù)--Prototype
          其實(shí),Javascript現(xiàn)在的語(yǔ)法真的不適合那么別扭的寫(xiě)成OO模式....
          posted on 2006-03-25 11:16 渠上月 閱讀(222) 評(píng)論(0)  編輯  收藏 所屬分類: js tips
          主站蜘蛛池模板: 息烽县| 东乌珠穆沁旗| 离岛区| 苏尼特左旗| 竹溪县| 昌乐县| 德惠市| 弥勒县| 昌平区| 沭阳县| 南阳市| 仁寿县| 桃园县| 交口县| 宿州市| 阜南县| 穆棱市| 富阳市| 岳西县| 宁海县| 绍兴市| 木兰县| 新巴尔虎左旗| 广宁县| 长丰县| 南汇区| 灵丘县| 商南县| 郸城县| 广平县| 德格县| 巴林左旗| 蓬安县| 客服| 岱山县| 雷山县| 金秀| 高尔夫| 富裕县| 临海市| 东阳市|