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

javascript每日必學(xué)之繼承

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

朋友們大家好,我們今天這一講就接著前面的封裝繼續(xù)講解,今天就是在前面內(nèi)容上面的升級(jí),OOP思想中的繼承,我們就先來(lái)解釋一下繼承到底是什么意思,我們?cè)谑裁吹胤綍?huì)用到繼續(xù)。

  繼承就是,后代繼續(xù)祖先的一系列屬性,行為。后代仍然算是與祖先同族,下面我們?cè)儆靡恍┚唧w描述,來(lái)理解一下什么是繼承

中國(guó)人,跟美國(guó)人都是 繼承自 人類祖先,所以我們具有相同的屬性行為,但是還有一定的差異,后面我們們將繼續(xù)講到的多態(tài),所以通過(guò)上面的示例圖,我們可以清晰的知道,人與人之前其實(shí)大同小異,所以我們?cè)倏纯聪旅娴氖纠a,我們就知道,用代碼來(lái)模擬繼承,我們就又可以知道一種方法來(lái)寫盡量少的代碼達(dá)到做盡量多的事。

//遺傳繼承函數(shù)
function Extend(Children,Parent){
  //這里僅僅只是繼承的原型鏈接定義的行為
  for(var p in Parent.prototype){
    Children[p] = Parent.prototype[p];
  }
}
//人類祖先
function Human(){
  this.weight = "50kg";
  this.height = "180cm";
  this.hair = "棕色";
}
//吃飯
Human.prototype.Eat = function(){
  console.log("吃飯");
}
//說(shuō)話
Human.prototype.Say = function(){
  console.log("大家好我是地球人");
}
//行走
Human.prototype.Walk = function(){
  console.log("我是人類,天生就可以兩條腿直立行走");
}
//繁衍
Human.prototype.Multiply = function(){
  console.log("跟老婆一起做羞羞的事,就是為了人類的繁榮");
}

//中國(guó)人
function Chinese(){
  //調(diào)用繼承函數(shù)
  Extend(this,Human);
}
//美國(guó)人
function American(){
  //調(diào)用繼承函數(shù)
  Extend(this,Human);
}

我們就這樣寫,就模擬了高級(jí)語(yǔ)言中的繼承,下面我們看看運(yùn)行后,有沒(méi)有問(wèn)題

運(yùn)行后,我們發(fā)現(xiàn)了問(wèn)題,這樣寫,我們已經(jīng)可以實(shí)現(xiàn)原型鏈接的繼承了,而且也大大的節(jié)省了很多代碼,我們?cè)趯慍hinese和American函數(shù)的時(shí)候,是不是只寫了少量代碼,我們就把父類行為給繼承過(guò)來(lái)了,而實(shí)例也能調(diào)用父類所擁有的行為函數(shù),但是這樣寫,我們還沒(méi)有完全實(shí)現(xiàn)繼承,因?yàn)槲覀冊(cè)谡{(diào)用hair屬性的時(shí)候就根本沒(méi)有起到作用,那么,我們?cè)傩薷囊幌麓a,就可以實(shí)現(xiàn)完全繼承了

//遺傳繼承函數(shù)
function Extend(Children,Parent){
  //現(xiàn)在我們是從父類實(shí)例來(lái)繼承,所以屬性和方法都會(huì)被繼承的
  for(var p in Parent){
    if(typeof Children[p] == "undefined"){
      Children[p] = Parent[p];
    }
  }
}
//人類祖先
function Human(){
  this.weight = "50kg";
  this.height = "180cm";
  this.hair = "棕色";
}
//吃飯
Human.prototype.Eat = function(){
  console.log("吃飯");
}
//說(shuō)話
Human.prototype.Say = function(){
  console.log("大家好我是地球人");
}
//行走
Human.prototype.Walk = function(){
  console.log("我是人類,天生就可以兩條腿直立行走");
}
//繁衍
Human.prototype.Multiply = function(){
  console.log("跟老婆一起做羞羞的事,就是為了人類的繁榮");
}
//中國(guó)人
function Chinese(){
  //調(diào)用繼承函數(shù)
  Extend(this,new Human());
}
//美國(guó)人
function American(){
  //調(diào)用繼承函數(shù)
  Extend(this,new Human());
}

我們還是要看一下運(yùn)行的效果是不是跟我們想象中的一樣?

通過(guò)上在的代碼我們不難看出,現(xiàn)在的繼承函數(shù)實(shí)際上是從Human類的具體實(shí)例中復(fù)制的屬性及行為,這樣我們就更進(jìn)一步模擬出了類的繼承,在上面有一句,我還需要給大家解釋一下

if(typeof Children[p] == "undefined"){
 ...... 
}

這里出現(xiàn)的typeof關(guān)鍵字其實(shí)是一個(gè)運(yùn)算符,是查看某個(gè)變量是什么類型,如果是未定義的情況,運(yùn)算出的結(jié)果就是 "undefined" ,所以我就是這樣比較,如果子類沒(méi)有定義過(guò)這樣的屬性或者行為函數(shù),那么就從父類繼承(注:這里的解釋是為了后面的多態(tài)作鋪墊)。

  接下來(lái)我們?cè)賮?lái)看一下可不可以多重繼承,前面我們已經(jīng)提到Chinese與American兩個(gè)類都是繼承自Human類,下面我們?cè)賹懸粋€(gè)類來(lái)繼承自Chinese

//四川人
function SiChuanMan(){
  Extend(this,new Chinese());
}

現(xiàn)在我們已經(jīng)寫出很健壯的繼承代碼,理解也非常的簡(jiǎn)單,只要在聲明新類的時(shí)候,在構(gòu)造函數(shù)里面調(diào)用一下繼承函數(shù),我們就可以實(shí)現(xiàn)屬性及行為函數(shù)的完全繼承,這樣,我們就可以省下大量的代碼,OOP思想的優(yōu)勢(shì)再一次地被體現(xiàn)了出來(lái),如果我們要模擬中國(guó)每個(gè)省份的人,如果我每個(gè)省份都照著Human類的方式去寫,從太陽(yáng)出來(lái)寫到第二天的太陽(yáng)落坡都寫不完。繼承的寫法多種多樣,每個(gè)人都有自己的寫法,這里,我就是以一種最簡(jiǎn)單的方式給大家講解的,到后面大家能熟練使用時(shí)候,也可以以自己喜歡的方式去寫,javascript本身就是一門很靈活的語(yǔ)言。

  總結(jié)一下,我們今天在封裝基礎(chǔ)上進(jìn)一步做了升級(jí),這樣我們就實(shí)現(xiàn)了對(duì)象的繼承,書(shū)寫的代碼量被進(jìn)一步被壓縮,想想能提高工作的效率,更能提高代碼的優(yōu)雅度,是不是有一點(diǎn)的小激動(dòng)呢,只要跟著我腳步走,我們就可以用最簡(jiǎn)單的方式去理解最復(fù)雜的東西,其實(shí)程序并不復(fù)雜,復(fù)雜的原因是大家沒(méi)有得到正確的帶領(lǐng),本來(lái)很簡(jiǎn)單的一個(gè)東西,被不同的人理解及解釋成不同的東西,這樣學(xué)習(xí)起來(lái)就復(fù)雜了,更多的是沒(méi)有連續(xù)的教程一步一步地帶領(lǐng)大家向正確的方向邁進(jìn),所以很長(zhǎng)時(shí)間都很難得到提升。

相關(guān)文章

最新評(píng)論

井陉县| 桐城市| 榆林市| 台中市| 乐昌市| 双牌县| 南陵县| 黑龙江省| 久治县| 昔阳县| 彰化市| 北宁市| 麟游县| 宾阳县| 锦州市| 思茅市| 海门市| 盐亭县| 通辽市| 平顺县| 神农架林区| 马尔康县| 团风县| 富顺县| 无锡市| 黎平县| 江华| 麻阳| 绥滨县| 太白县| 高台县| 夹江县| 咸阳市| 富民县| 唐海县| 沛县| 太和县| 黄陵县| 涟水县| 太康县| 泸水县|