<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      《JavaScript高級程序設計》閱讀筆記(十四):繼承機制的實現

      繼承

        繼承是面向對象語言的必備特征,即一個類能夠重用另一個類的方法和屬性。在JavaScript中繼承方式的實現方式主要有以下五種:對象冒充、call()、apply()、原型鏈、混合方式。

        下面分別介紹。

      對象冒充

        原理:構造函數使用this關鍵字給所有屬性和方法賦值。因為構造函數只是一個函數,所以可以使ClassA的構造函數成為ClassB的方法,然后調用它。ClassB就會收到ClassA的構造函數中定義的屬性和方法。

        示例:

      function ClassA(sColor){
      this.color=sColor;
      this.sayColor=function(){
      alert(this.color);
      }
      }

      function ClassB(sColor,sName){
      this.newMethod=ClassA;
      this.newMethod(sColor);
      delete this.newMethod;

      this.name=sName;
      this.sayName=function(){
      alert(this.name);
      }
      }

        調用:

      var objb=new ClassB("blue","Test");
      objb.sayColor();// blue
      objb.sayName(); // Test

        注意:這里要刪除對ClassA的引用,否則在后面定義新的方法和屬性會覆蓋超類的相關屬性和方法。用這種方式可以實現多重繼承。

      call()方法

        由于對象冒充方法的流行,在ECMAScript的第三版對Function對象加入了兩個新方法 call()和apply()方法來實現相似功能。

        call()方法的第一個參數用作this的對象,其他參數都直接傳遞給函數自身。示例:

      function sayColor(sPrefix,sSuffix){
      alert(sPrefix+this.color+sSuffix);
      }

      var obj=new Object();
      obj.color="red";

      //output The color is red, a very nice color indeed.
      sayColor.call(obj,"The color is ",", a very nice color indeed.");

        使用此方法來實現繼承,只需要將前三行的賦值、調用、刪除代碼替換即可:

      function ClassB(sColor,sName){
      //this.newMethod=ClassA;
      //this.newMethod(sColor);
      //delete this.newMethod;
      ClassA.call(this,sColor);

      this.name=sName;
      this.sayName=function(){
      alert(this.name);
      }
      }

      apply()方法

        apply()方法跟call()方法類似,不同的是第二個參數,在apply()方法中傳遞的是一個數組。

      function sayColor(sPrefix,sSuffix){
      alert(sPrefix+this.color+sSuffix);
      }

      var obj=new Object();
      obj.color="red";

      //output The color is red, a very nice color indeed.
      sayColor.apply(obj,new Array("The color is ",", a very nice color indeed."));

        使用此方法來實現繼承,只需要將前三行的賦值、調用、刪除代碼替換即可:

      function ClassB(sColor,sName){
      //this.newMethod=ClassA;
      //this.newMethod(sColor);
      //delete this.newMethod;
      ClassA.apply(this,new Array(sColor));

      this.name=sName;
      this.sayName=function(){
      alert(this.name);
      }
      }

        跟call()有一點不同的是,如果超類中的參數順序與子類中的參數順序完全一致,第二個參數可以用arguments。

      原型鏈

        繼承這種形式在ECMAScript中原本是用于原型鏈的。Prototype對象的任何屬性和方法都被傳遞給那個類的所有實例。原型鏈利用這種功能實現繼承機制。

        用原型鏈實現繼承示例:

      function ClassA(){
      }

      ClassA.prototype.color="red";
      ClassA.prototype.sayColor=function(){
      alert(this.color);
      };

      function ClassB(){
      }

      ClassB.prototype=new ClassA();

        注意:調用ClassA的構造函數時,沒有給它傳遞參數。這在原型鏈中是標準的做法,要確保構造函數沒有任何參數。

      混合方式

        這種方式混合了對象冒充和原型鏈方式。示例:

      function ClassA(sColor){
      this.color=sColor;
      }
      ClassA.prototype.sayColor=function(){
      alert(this.color);
      }

      function ClassB(sColor,sName){
      ClassA.call(this,sColor);
      this.name=sName;
      }

      ClassB.prototype=new ClassA();
      ClassB.prototype.sayName=function(){
      alert(this.name);
      }

        調用示例:

      var objb=new ClassB("red","test");
      objb.sayColor();// output red
      objb.sayName();// output test
      posted @ 2012-04-01 14:37  artwl  閱讀(711)  評論(0)    收藏  舉報

      個人簡介

      var ME = {
      	"name": "土豆/Artwl",
      	"job": "coding",
      	"languages": [
      		"JS", "HTML",
                      "CSS", "jQuery"
      		"MVC",".NET",
      		"設計模式"
      	],
      	"hobby": [
      		"閱讀", "旅游",
      		"音樂", "電影"
      	]
      }
      
      TOP
      主站蜘蛛池模板: 色欲av久久一区二区三区久| 亚洲精品中文综合第一页| 中山市| 91精品国产综合蜜臀蜜臀| 欧美成人午夜在线观看视频| 欧美和黑人xxxx猛交视频| 粉嫩小泬无遮挡久久久久久| 久热这里只精品99国产6-99RE视… | 亚洲欧洲日产国无高清码图片| 国产一卡2卡三卡4卡免费网站| 日韩AV高清在线看片| 国产精品一区二区三区性色 | 成人毛片一区二区| 亚洲性美女一区二区三区| 国产性色的免费视频网站| 熟妇人妻无码中文字幕老熟妇| 精品熟女少妇av免费久久| 亚洲欧洲精品国产二码| 国产免费一区二区三区在线观看 | av午夜福利一片看久久| 伊吾县| 亚洲精品揄拍自拍首页一| 国产亚洲精品VA片在线播放| 亚洲VA中文字幕无码久久不卡| 污污网站18禁在线永久免费观看| 99精品国产一区二区三区不卡| 亚洲av日韩av永久无码电影| 精河县| 久久99热只有频精品8| 男女啪啪高潮激烈免费版| 亚洲欧美成人一区二区三区| 欧美精品在线观看视频| 久久99精品国产麻豆婷婷| 视频一区视频二区亚洲视频 | 国产午夜精品福利91| 武装少女在线观看高清完整版免费| 在线视频中文字幕二区| 国产精品亚洲av三区色| 2021久久精品国产99国产精品| 亚洲中文字幕一区二区| 国产美女被遭强高潮免费一视频|