JavaScript设计模式

学习JavaScript设计模式——面向对象(四)

2019-03-04  本文已影响0人  小霸王的铲屎官

面向对象(四)

继承

4. 多继承——老师不止一位

  // 继承单对象属性的方法extend方法
  
  // 单继承属性复制
  let extend = (target, source)=> {
    // 遍历元对象中的属性
    for(let property in target) {
      // 将源对象中的属性复制到目标对象中
      target[property] = source[property]
    }
    // 返回目标对象
    return target
  }

测试代码

 let book = {
    name: 'JavaScript 设计模式',
    alike: ['css', 'html', 'JavaScript']
 }
 
 let anotherBook = {
   color: 'blue'
 }
 
 extend(anotherBook, book)
 
 console.log(anotherBook.name)  // 'JavaScript 设计模式'
 console.log(anotherBook.alike) // ['css', 'html', 'JavaScript']
 
 anotherBook.alike.push('ajax')
 anotherBook.name = '设计模式'
 
 console.log(anotherBook.name)  // 设计模式
 console.log(anotherBook.alike) // ['css', 'html', 'JavaScript', 'ajax']
 
 console.log(book.name)         // JavaScript 设计模式
 console.log(book.alike)        // ['css', 'html', 'JavaScript', 'ajax']
 

传递多对象进行继承

 // 多继承 属性复制
 const mix= () =>{
    let i = 1;                    // 从第二个参数起为被继承的对象
    let len = arguments.length    // 获取参数的长度
    let target = arguments[0]     // 第一个参数为目标对象
    let arg                       // 缓存参数对象
    
    // 遍历被继承的对象
    for(;i<len;i++){
      // 缓存当前对象
      arg = arguments[i]
      // 遍历被继承对象中的属性
      for(let property in arg){
         // 将被继承的对象的属性复制到目标对象中
         target['property'] = arg['property']
      }
    }
    // 返回目标对象
    return target
 }

  Object.prototype.mix =()=> {
     let i = 0                    // 从第一个参数起为被继承的对象
     let len = arguments.length   // 获取参数的长度
     let arg                      // 缓存参数对象
     for(; i<len; i++) {
        // 缓存当前对象
        arg = arguments[i]
        // 遍历被继承对象的属性
        for(let property in arg) {
          // 将被继承对象中的属性复制到目标对象中
          this[property] = arg[property]
        }
     }
  }

测试代码

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

明天继续多态,还可能总结得到一设计模式了

上一篇下一篇

猜你喜欢

热点阅读