學(xué)習(xí)JavaScript設(shè)計(jì)模式——面向?qū)ο?四)

面向?qū)ο?四)

繼承

4. 多繼承——老師不止一位

  • 首先表谊,JavaScript實(shí)現(xiàn)多繼承是有一些局限性的酿矢,因?yàn)镴avaScript中繼承時(shí)依賴于prototype鏈實(shí)現(xiàn)的秸滴,只有一條原型鏈逆济,所以理論上不能繼承多個父類的
  • 通過一些技巧和方法可以繼承多個對象的屬性來實(shí)現(xiàn)類似的多繼承
  // 繼承單對象屬性的方法extend方法
  
  // 單繼承屬性復(fù)制
  let extend = (target, source)=> {
    // 遍歷元對象中的屬性
    for(let property in target) {
      // 將源對象中的屬性復(fù)制到目標(biāo)對象中
      target[property] = source[property]
    }
    // 返回目標(biāo)對象
    return target
  }

測試代碼

 let book = {
    name: 'JavaScript 設(shè)計(jì)模式',
    alike: ['css', 'html', 'JavaScript']
 }
 
 let anotherBook = {
   color: 'blue'
 }
 
 extend(anotherBook, book)
 
 console.log(anotherBook.name)  // 'JavaScript 設(shè)計(jì)模式'
 console.log(anotherBook.alike) // ['css', 'html', 'JavaScript']
 
 anotherBook.alike.push('ajax')
 anotherBook.name = '設(shè)計(jì)模式'
 
 console.log(anotherBook.name)  // 設(shè)計(jì)模式
 console.log(anotherBook.alike) // ['css', 'html', 'JavaScript', 'ajax']
 
 console.log(book.name)         // JavaScript 設(shè)計(jì)模式
 console.log(book.alike)        // ['css', 'html', 'JavaScript', 'ajax']
 

傳遞多對象進(jìn)行繼承

 // 多繼承 屬性復(fù)制
 const mix= () =>{
    let i = 1;                    // 從第二個參數(shù)起為被繼承的對象
    let len = arguments.length    // 獲取參數(shù)的長度
    let target = arguments[0]     // 第一個參數(shù)為目標(biāo)對象
    let arg                       // 緩存參數(shù)對象
    
    // 遍歷被繼承的對象
    for(;i<len;i++){
      // 緩存當(dāng)前對象
      arg = arguments[i]
      // 遍歷被繼承對象中的屬性
      for(let property in arg){
         // 將被繼承的對象的屬性復(fù)制到目標(biāo)對象中
         target['property'] = arg['property']
      }
    }
    // 返回目標(biāo)對象
    return target
 }

  • 這個函數(shù)有個缺點(diǎn)爆土,需要傳入目標(biāo)對象(第一個參數(shù))
  • 如果將它綁定到原生對象Object上的話搁嗓,所有對象都可以擁有這個方法 如下
  Object.prototype.mix =()=> {
     let i = 0                    // 從第一個參數(shù)起為被繼承的對象
     let len = arguments.length   // 獲取參數(shù)的長度
     let arg                      // 緩存參數(shù)對象
     for(; i<len; i++) {
        // 緩存當(dāng)前對象
        arg = arguments[i]
        // 遍歷被繼承對象的屬性
        for(let property in arg) {
          // 將被繼承對象中的屬性復(fù)制到目標(biāo)對象中
          this[property] = arg[property]
        }
     }
  }

測試代碼

  let book1 = {
    name: 'JavaScript 設(shè)計(jì)模式',
    alike: ['css', 'html', 'js']
  }
  
  let book2 = {
    color: 'blue'
  }
  
  let otherBook = {}
  
  otherBook.mix(book1, book2)
  console.log(otherBook)        // Object { name:'JavaScript 設(shè)計(jì)模式', alike: Array(3), color: 'blue', mix: function }
  

明天繼續(xù)多態(tài)贬丛,還可能總結(jié)得到一設(shè)計(jì)模式了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笋轨,一起剝皮案震驚了整個濱河市冠场,隨后出現(xiàn)的幾起案子家浇,更是在濱河造成了極大的恐慌,老刑警劉巖碴裙,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钢悲,死亡現(xiàn)場離奇詭異,居然都是意外死亡舔株,警方通過查閱死者的電腦和手機(jī)莺琳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來载慈,“玉大人惭等,你說我怎么就攤上這事“煺。” “怎么了辞做?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵琳要,是天一觀的道長。 經(jīng)常有香客問我秤茅,道長稚补,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任框喳,我火速辦了婚禮课幕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘五垮。我一直安慰自己乍惊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布放仗。 她就那樣靜靜地躺著润绎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匙监。 梳的紋絲不亂的頭發(fā)上凡橱,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音亭姥,去河邊找鬼稼钩。 笑死,一個胖子當(dāng)著我的面吹牛达罗,可吹牛的內(nèi)容都是我干的坝撑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粮揉,長吁一口氣:“原來是場噩夢啊……” “哼巡李!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扶认,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侨拦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辐宾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狱从,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年叠纹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了季研。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡誉察,死狀恐怖与涡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤驼卖,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布氨肌,位于F島的核電站,受9級特大地震影響酌畜,放射性物質(zhì)發(fā)生泄漏儒飒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一檩奠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧附帽,春花似錦埠戳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喳钟,卻和暖如春屁使,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奔则。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工蛮寂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人易茬。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓酬蹋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抽莱。 傳聞我的和親對象是個殘疾皇子范抓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容