最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 面向?qū)ο?繼承

 更新時間:2010年05月13日 16:51:07   作者:  
所有面向?qū)ο蟮恼Z言都應(yīng)該有繼承的特性,JavaScript 也不例外。
在JavaScript中實現(xiàn)繼承可以有多種方法,下面說兩種常見的。

一,call 繼承,先看代碼:
  先定義一個“人”類
復(fù)制代碼 代碼如下:

//人類
Person=function(){
this.name="草泥馬";
this.eat=function(){
alert("我要吃飯");
}
this.sleep=function(){
alert("我要睡覺");
}
}

  再定義一個學生類,讓它繼承于Person
復(fù)制代碼 代碼如下:

//學生類
Student=function(){
Person.call(this);//繼承Person類
this.doHomework=function(){
alert("老師來了,作業(yè)借我抄下");
}
}

  關(guān)鍵看 Person.call(this)這句,其中this代表當前對象,即Student ,這很容易理解,而Person.call(this)的意思是:將Person類的所有的公開成員“附加”給Student類,讓Student也具有了Person的所有功能。
  和高級語言一樣,如果子類中出現(xiàn)了和父類中同名的成員,則會將其覆蓋,也就是所謂的“重寫”了。
  同樣的,我們再定義一個女孩類 :
復(fù)制代碼 代碼如下:

//女孩類
Girl=function(){
Person.call(this);//繼承Person類
this.sex="女";
}
  JavaScript是可以實現(xiàn)多重繼承的,請看下面的Master(碩士)類,這個Master 自然是個學生,但同時又是個漂亮MM,于是有了下面的代碼:
//碩士類
Master=function(){
Student.call(this);//繼承Student類
Girl.call(this);//繼承Girl類
this.degree="碩士";//學歷
}

  我們可以測試一下:
復(fù)制代碼 代碼如下:

var master=new Master();
master.name="鳳姐";
master.eat();
master.doHomework();
alert("偶是名字叫:"+master.name);
alert("偶的性別是:"+master.sex);

  多重繼承時要注意順序,如果兩個類中有相同名稱的成員,那么后一個將覆蓋前一個,也就是說當前類只會繼承后一個類中的成員。
  call 方法繼承就說到這,如果大家對call方法不清楚,就請去問問谷歌兄,我就不贅述了,網(wǎng)上轉(zhuǎn)載得不要太多。下面說下另外一種繼承方式。
  二,prototype 原型繼承:
  我們再定義一個班長類:
復(fù)制代碼 代碼如下:

//班長類
SquadLeader=function (){
//打招呼
this.hi=function(){
alert("同學們好,我現(xiàn)在是班長了");
}
}

  上面定義了一個碩士類,現(xiàn)在這個碩士被提升為班長了,所以這個Master要繼承SquadLeader了,這次我們用prototype 來實現(xiàn),請看下面代碼:

Master.prototype=new SquadLeader();//prototype 屬性指向一個對象
//或者
//Master.prototype=SquadLeader.prototype;
  這樣Master就繼承了SquadLeader類,就這么一句話,這里有兩種形式,其實原理是一樣的。意思是:將SquadLeader的“靈魂”拷貝給了Master,于是從此SquadLeader能做的事,Master都可以做了。
  測試一下:
var master=new Master();
master.hi()//輸出“同學們好,我現(xiàn)在是班長了”  
  
  我個人比較喜歡用第一種方案(call 繼承)來實現(xiàn)繼承,所有代碼都包在一個“{}”內(nèi),一目了然,在書寫風格上較之于第二種更接近于C#。prototype 屬性我一般用來對已有的類做擴展。
  JavaScript是門非常靈活的語言,實現(xiàn)繼承可能還有其他更好的方式,大家可以去研究挖掘,我在這就當是拋了塊磚頭, 希望能引出華美的玉石!

相關(guān)文章

  • javascript面向?qū)ο笾?命名空間

    javascript面向?qū)ο笾?命名空間

    javascript中本沒有命名空間的概念,但是要體現(xiàn)面向?qū)ο蟮乃枷耄瑧?yīng)當有命名空間,就像java中的package,.net中的namespace一樣,作用主要為了防止類名沖突,相同的類名只要屬于不同的命名空間,便不會沖突。
    2011-02-02
  • 最新評論

    独山县| 潜江市| 兰考县| 柘城县| 文化| 筠连县| 平舆县| 仪征市| 邵武市| 嘉禾县| 苍山县| 长白| 三河市| 阿勒泰市| 乐业县| 登封市| 庆安县| 东海县| 夏河县| 孝昌县| 成安县| 平阴县| 高碑店市| 义乌市| 崇州市| 盘锦市| 芦溪县| 平远县| 亚东县| 呼图壁县| 上犹县| 昭苏县| 肥西县| 万安县| 高要市| 万州区| 阜新| 车致| 比如县| 静宁县| 闻喜县|