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

面向对象(五)

多态

我仔细看了一下,这里说的JavaScript 的多态好像和Java的多态不一样,

  • Java 的多态讲的是类的继承,父类实例指向子类对象,父类方法的重写
  • JavaScript的多态是一个方法多种调用方式

还是有一些不同, 上代码

  // 多态
  function add() {
    // 获取参数
    let arg = arguments
    // 获取参数长度
    let len = arg.length
    switch(len) {
      // 如果没有参数
      case 0:
         return 10;
      // 如果只有一个参数   
      case 1:
         return 10 + arg[0]
      // 如果有两个参数
      case 2:
         return arg[0] + arg[1]      
    }
  }
  
  
  // 测试用例
  console.log(add())        // 10
  console.log(add(5))       // 15
  console.log(add(6, 7))    // 13

另一种更易懂的形式(更像面向对象的方式)

function Add(){
   // 无参数算法
   function zero() {
      return 10
   }
   // 一个参数的算法
   function one(num) {
      return 10+num
   }
   // 两个参数的算法
   function two(num1, num2){
      return num1+num2
   }
   this.add = function() {
      let arg = arguments
      let len = arg.length
      
      switch(len) {
         case 0:
            return zero()
         case 1:
            return one(arg[0])
         case 2:
            return two(arg[0], arg[1])   
      }
   }
 }
 
 // 实例化类
 let A = new Add()
 // 测试
 console.log(A.add())      // 10
 console.log(A.add(5))     // 15
 console.log(A.add(6, 7))  // 13
 

总结一下(这里的能稍微看看就行)

在JavaScript中

封装

  • 封装与集成是面向对象中的两个主要特性,继承即是对原有对象的封装,从中创建私有属性,私有方法,特权方法,共有属性,共有方法等。
  • 有的不论对类如何实例化,它只创建一次,这类属性或方法我们称之为静态的
  • 只被类所拥有的属性和方法是静态类属性和静态类方法 (这段有点没说清楚)
  • 可以被继承的的方法与属性 一类是在构造函数中,这类属性与方法在对象实例化时 被复制一遍
  • 另一类在类的原型对象中,这类属性与方法在对象实例化时被所有实例化对象所共用

继承

  • 如果实例化的是对象,那么则为对象继承 (这个说法真飘逸= =)

  • 如果实例化的是类(当然累也是一种对象,只不过是用来创建对象的), 那么就是一种类的继承

  • 通过原型链继承的方式我们称之为类式继承

  • 通过构造函数继承的方式我们称之为构造函数式继承

  • 这两种方式组合起来的方式我们称之为组合式继承

  • 由于类式继承过程中会实例化父类,这样如果父类构造函数极其复杂,那么这种方式对构造函数的开销是不值得的,所以有了一种新的继承方式,通过在一个函数内的过度对象实现继承并返回新对象的方式,我们称之为寄生式继承

  • 我们再结合构造函数式继承,这样再融合构造函数继承中的有点并去除其缺点,得到的继承方式就是 寄生组合式继承,

  • 有时候子类对父类实现继承可以通过拷贝方法与属性的方式来实现,这就有了多继承,即将多个父类(对象)的属性与方法拷贝给子类实现继承

  • 这里的JavaScript的多态,通过对传递参数判断来决定执行逻辑,可以实现一种多态处理机制(和Java不太一样)

面向对象基础就暂时这样了,后面就开始正式的面向对象的实战应用,设计模式了...

你可能感兴趣的:(学习JavaScript设计模式——面向对象(五))