js实现多态

js的多态
子类对父类方法的重写, 这个会默认执行子类的方法, 即实现多态
不同子类执行父类的同名方法会有不同的结果, 即下面这种
还有函数参数个数, 参数类型的多态

不同子类执行父类的同名方法会有不同的结果

实现方式
父类中调用未来子类的方法
子类的创建的时候, 写自己的方法, 继承父类, 调用父类的同名方法的时候, 父类原型上的this此时指向子类
这个时候就会调用不同子类的方法

    function Base() {
      Base.prototype.initfun = function() {
        this.init()
      }
    }
    function Sub1 () {
      this.init = function() {
        console.log('1')
      }
    }
    function Sub2() {
      this.init = function() {
        console.log('2')
      }
    }
    Sub1.prototype = new Base()
    Sub2.prototype = new Base()
    new Sub1().initfun () // sub1的init方法
    new Sub2().initfun () // sub2的init方法

参数个数不同, 执行不同的代码

利用arguments.length判断来实现

function fun() {
      if(arguments.length === 0) {
        console.log('参数为0')
      } else if (arguments.length === 1) {
        console.log('一个参数', arguments[0])
      } else if (arguments.length === 2) {
        console.log('两个参数', arguments[0], arguments[1])
      }
    }
    fun() 
    fun(1)
    fun(1, 2)

参数类型不同的多态

利用typeof判断argument的类型进行判断

function fun2() {
      if (typeof arguments[0] === 'object' && typeof arguments[1] === 'string') {
        console.log('类型1')
      }else {
        console.log('类型2')
      }
    }
fun2({a:1}, 's'); fun2({a: 1}, 1)

你可能感兴趣的:(js,javascript,前端,原型模式)