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

javascript每日必學(xué)之多態(tài)

 更新時間:2016年02月23日 11:20:49   作者:N_ToWordsNing  
javascript每日必學(xué)之多態(tài),介紹了有關(guān)多態(tài)的相關(guān)內(nèi)容,感興趣的小伙伴們可以參考一下

  朋友們大家好,今天我們就接著前面的內(nèi)容講,前面我們已經(jīng)講到了繼承,今天我們就來講OOP目前最后一個體現(xiàn),那就是多態(tài),因為javascript語言的靈活性,所以我們是沒有辦法使用接口的,所以這也給js程序帶來了一定的困惑,大家也不用太著急關(guān)心這個問題,因為這些到后面ECMAScript后面的版本會給我們解決這些問題的,又扯遠(yuǎn)了,還是回到正題,OOP的多態(tài),前面我們已經(jīng)可以很明白的理解繼承是什么樣子的了,就是先聲明一個父類,然后,我們可以寫很多的子類來繼承父類的屬性和方法,這些我們就可以用最少的代碼量,實現(xiàn)了與父類一樣的功能,這就是繼承。馬上就有同學(xué)提出疑問:前面的繼承我看了很久,也能有理解,但主是不知道有什么用,為什么我們要去寫那么多的繼承類?這個問題,立馬切中要害,問得相當(dāng)?shù)年P(guān)鍵,如果沒有多態(tài)的存在,我們先前所說的繼承還真沒什么用,因為我們所有的繼承類都是一模一樣的復(fù)制,沒有什么特點。舉個例子:

我們可以很明顯地就看出問題來了,熊貓A,熊貓B與父類的熊貓完全一樣,雖然,我們可以很輕松寫很多個子類來,但是,這并沒有什么用,我們就直接使用父類的屬性和方法,就能達(dá)到我們的目的,對,這樣說,感覺OOP的繼承沒有什么用了,前面我們才學(xué)到的知識,不會就這樣浪費了吧,哈哈,不要怕,前面只要只是你所學(xué)到的東西,完全沒有白學(xué),下面我們就來講繼承的補(bǔ)充,多態(tài),看示例圖:

不管是人類,還是其他動物,不斷的繁衍,不斷的進(jìn)化,每一個后代看似一樣,其實又不一樣,或多或少都有自己的獨特的屬性或者行為,現(xiàn)在熊貓A在某種特別的情況下學(xué)會了洗澡,它有自己的衛(wèi)生屬性,而熊貓B是個高手,學(xué)會了泡妞(大爺?shù)模献佣紱]學(xué)會,它學(xué)會了),它有了自己的魅力屬性,這樣我們就可以很清晰看出來,當(dāng)我們需要寫一個子類來繼承父類的時候,它一定是具有和父類相同行為或者屬性而且還一定具有自己獨特的行為或者屬性,這樣我們就省去了相同行為或者屬性的代碼編寫(OOP思想帶來的好處再一次被體現(xiàn)),下面我們來看實例代碼:

//遺傳繼承函數(shù)
function Extend(Children,Parent){
  for(var p in Parent){
    if(typeof Children[p] == "undefined"){
      Children[p] = Parent[p];
    }
  }
}

//熊貓父類
function Panda(){
  //顏色
  this.color = "黑色交錯";
  //健康值
  this.health = 100;
  //可愛值
  this.lovely = 80;
  //年齡
  this.age = "3歲";
}
//吃
Panda.prototype.Eat = function(){
  console.log("吃竹子");
}
//拉
Panda.prototype.Shit = function(){
  console.log("拉了一坨翔");
}
//睡
Panda.prototype.Sleep = function(){
  console.log("美美地睡了一整天");
}
//交配
Panda.prototype.Mating = function(){
  console.log("熊貓的愛愛也是為了下一代嘛");
}

//熊貓A
function Panda_A(){
  //講衛(wèi)生度
  this.lovehealth = 60;
  
  Extend(this,new Panda());
}
//洗澡
Panda_A.prototype.Bath = function(){
  console.log("為了不生病,就得講衛(wèi)生,我去洗澡了");
  //洗一次澡,講衛(wèi)生程度 + 1
  this.lovehealth += 1;
}

//熊貓B
function Panda_B(){
  //魅力值
  this.charm = 90;
  
  Extend(this,new Panda());
}
//泡妞
Panda_B.prototype.GetGirls = function(){
  console.log("為了族群的繁榮,我就先去泡妞去了,誰叫我的魅力這么高呢?");
  //泡一次妞,魅力值 - 1
  this.charm -= 1;
}

下面我們看一看示例,是不是跟前面描述的一樣?

不管是父類的實例,還是子類的實例,都能正常的使用父類(共有)的屬性及行為函數(shù),下面再來看看特有的呢?

再來大家最關(guān)心的那個行為還沒測試,就是熊貓B可以泡妞,不再調(diào)大家的口味了,立馬測試

能過上面的示例,我們已經(jīng)知道多態(tài)是怎么一回事了,現(xiàn)在又有同學(xué)發(fā)問了:前面我們已經(jīng)可以實現(xiàn)多態(tài)了,只是看到多了一些特有的屬性和行為,那么可不可以改變一些原有屬性及行為呢?因為要模擬對象,我們就要做到盡量相同的模擬,就像,如果還有一個熊貓C類,他們進(jìn)化得更高級了,已經(jīng)不用吃竹子了,居然學(xué)人開始吃飯了:

//熊貓C
function Panda_C(){
  
  Extend(this,new Panda());
}
//吃
Panda_C.prototype.Eat = function(){
  //吃飯
  console.log("我們要進(jìn)化得比人類更高級,所以我們就開始吃飯了,不再吃竹子??!");
}

看到了吧,只要是與父類已經(jīng)不相同的屬性或者行為,我們都可以通過重寫的方式來進(jìn)行覆蓋,從而實現(xiàn)子類變態(tài)的特殊要求。

  總結(jié)一下,今天我們就補(bǔ)充前面繼承的思想,從而實現(xiàn)了多態(tài)的模擬,OOP思想,我們也先就告一段落,相信大家已經(jīng)對OOP有了自己的認(rèn)識,就是把代碼模擬成對象來進(jìn)行編寫,這樣有兩個好處:

1、把代碼的重用率提高了,提高了工作效率。

2、代碼已經(jīng)被模擬在對象,這樣有條理代碼方便了我們管理,和后期維護(hù)及擴(kuò)展。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • JS高級調(diào)試技巧:捕獲和分析 JavaScript Error詳解

    JS高級調(diào)試技巧:捕獲和分析 JavaScript Error詳解

    前端工程師都知道 JavaScript 有基本的異常處理能力。我們可以 throw new Error(),瀏覽器也會在我們調(diào)用 API 出錯時拋出異常。但估計絕大多數(shù)前端工程師都沒考慮過收集這些異常信息
    2014-03-03
  • JS給Textarea文本框添加行號的方法

    JS給Textarea文本框添加行號的方法

    這篇文章主要介紹了JS給Textarea文本框添加行號的方法,涉及javascript針對頁面元素結(jié)點的讀取與判定技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • JavaScript函數(shù)apply()和call()用法與異同分析

    JavaScript函數(shù)apply()和call()用法與異同分析

    這篇文章主要介紹了JavaScript函數(shù)apply()和call()用法與異同,結(jié)合實例形式分析了apply()和call()的功能、區(qū)別、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-08-08
  • JavaScript實現(xiàn)簡單Tip提示框效果

    JavaScript實現(xiàn)簡單Tip提示框效果

    這篇文章主要介紹了JavaScript實現(xiàn)簡單Tip提示框效果,涉及JavaScript響應(yīng)鼠標(biāo)事件針對頁面元素動態(tài)操作的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • JavaScript函數(shù)式編程(Functional Programming)箭頭函數(shù)(Arrow functions)用法分析

    JavaScript函數(shù)式編程(Functional Programming)箭頭函數(shù)(Arrow functions)

    這篇文章主要介紹了JavaScript函數(shù)式編程(Functional Programming)箭頭函數(shù)(Arrow functions)用法,結(jié)合實例形式分析了javascript函數(shù)式編程中箭頭函數(shù)相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2019-05-05
  • javascript數(shù)組去重方法分析

    javascript數(shù)組去重方法分析

    這篇文章主要介紹了javascript數(shù)組去重方法,通過2個示例對比分析了javascript數(shù)組去重的原理與操作技巧,需要的朋友可以參考下
    2016-12-12
  • Electron 打包問題:electron-builder 下載各種依賴出錯(推薦)

    Electron 打包問題:electron-builder 下載各種依賴出錯(推薦)

    這篇文章主要介紹了Electron 打包問題:electron-builder 下載各種依賴出錯,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Ajax實現(xiàn)郵箱驗證實例代碼

    Ajax實現(xiàn)郵箱驗證實例代碼

    這篇文章介紹了Ajax實現(xiàn)郵箱驗證的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • js實現(xiàn)select下拉框菜單

    js實現(xiàn)select下拉框菜單

    這篇文章主要介紹了js實現(xiàn)select下拉框菜單的詳細(xì)代碼,感興趣的小伙伴們可以參考一下
    2015-12-12
  • javascript實現(xiàn)畫板功能

    javascript實現(xiàn)畫板功能

    這篇文章主要為大家詳細(xì)介紹了javascript實現(xiàn)畫板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

宁蒗| 珠海市| 长沙市| 逊克县| 平远县| 邢台县| 新绛县| 库车县| 宜君县| 漯河市| 绥芬河市| 宣汉县| 黄平县| 醴陵市| 上栗县| 朝阳市| 扶风县| 缙云县| 同心县| 图木舒克市| 英超| 临清市| 康平县| 宁安市| 德昌县| 清徐县| 阳信县| 个旧市| 杭锦后旗| 泸定县| 伊宁县| 嘉鱼县| 黄浦区| 龙山县| 德惠市| 枝江市| 准格尔旗| 利川市| 遵义县| 德格县| 增城市|