爪哇之家

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            35 隨筆 :: 29 文章 :: 8 評論 :: 0 Trackbacks
          ??? Prototype

          ??? 在《JavaScript中的對象(下)》一文中,我們了解到任何prototype的屬性和方法都會被傳遞到該類的所有實例中,利用這一特性,使用prototype也能實現繼承。
          ?
          function ClassA()? {
          }


          ClassA.prototype.id
          =?1998;
          ClassA.prototype.sayId
          =function(){
          ?? alert(
          this.id);
          }
          ;

          functionClassB(){
          }


          ClassB.prototype
          =newClassA();
          ClassB.prototype.name
          ="";
          ClassB.prototype.sayName
          =function(){
          ?? alert(
          this.name);
          }

          ??? 需要注意的是,這種實現繼承的方法不能將參數傳入到ClassA的構造器中,是一個缺陷。ClassB的所有屬性和方法必需在將ClassB的 prototype對象指向ClassA的實例之后進行附值。這樣做是因為,prototype指向一個新的對象,在此之前prototype的屬性和方 法都被覆蓋銷毀。

          ??? 對代碼進行測試:

          var ?obj1 = new ClassA();
          var ?obj2 = new ClassB();
          obj1.id
          =?1998;
          obj2.id
          =?2000;
          obj2.name
          ="悉尼奧運會";
          obj1.sayId();??
          //輸出"1998"
          obj2.sayId();??//輸出"1998"
          obj2.sayName();??//輸出"悉尼奧運會"

          alert(obj2
          instanceofClassA);??//輸出"true"
          alert(obj2 instanceofClassB);??//輸出"true"

          ??? 在上述代碼中可以看出,使用prototype實現繼承,instanceof操作符出現了另外的用途,在用構造起定義類實現繼承時,instanceof不會出現這種效果。但是使用prototype不能支持多重繼承。
          ??
          ??? 在《JavaScript中的對象(下)》和上文的論述中可以了解到,使用構造器定義類實現繼承和使用prototype實現繼承均存在各自的缺陷,要避免出現這些情況,只有將兩者混合使用。

          ??? 混合方法

          ??? 《JavaScript中的對象(下)》一文中曾經論述,創建一個類的最佳方法,是使用構造器的方法去定義屬性,使用prototype定義方法。在繼承中同樣如此。

          function ClassA(id) {
          ??
          this .id = id;
          }


          ClassA.prototype.sayId
          =?function() {
          ?? alert(
          this.id);
          }
          ;

          function ClassB(id,?name) {
          ?? ClassA.call(
          this,?id);
          ??
          this.name =name;
          }


          ClassB.prototype
          =? new ClassA();
          ClassB.prototype.sayName
          =function(){
          ?? alert(
          this.name);
          }
          posted on 2006-07-16 13:30 爪哇之家 閱讀(162) 評論(0)  編輯  收藏 所屬分類: javascript
          主站蜘蛛池模板: 商都县| 司法| 大足县| 延津县| 汝城县| 平潭县| 青海省| 大渡口区| 江都市| 潼南县| 佛学| 乌拉特前旗| 安塞县| 堆龙德庆县| 东源县| 甘洛县| 灵山县| 兴安县| 汕头市| 平阳县| 丰县| 如皋市| 喀什市| 平泉县| 丹凤县| 新乡市| 博野县| 雅安市| 杭州市| 左贡县| 宿松县| 玉门市| 沂南县| 阜新市| 昂仁县| 商都县| 会昌县| 襄城县| 峨边| 固阳县| 鹰潭市|