js函数重载

2020-08-05  本文已影响0人  TouchMe丶
  var users = {
  values: ['zzy zhang', 'hq huang', 'wxr wei']
}


function addMethod (object, name, fn) {
  // 先把原来的object[name] 方法, 保存在old中
  var old = object[name]

  // 重新定义object[name]方法
  object[name] = function() {
    //如果函数需要的参数 和 实际传入的参数的个数相同,就直接调用fn
    if(fn.length === arguments.length) {
      return fn.apply(this, arguments)

      // 如果不相同,判断old 是不是函数,
      // 如果是就调用old, 也就是刚才保存的object[name] 方法
    } else if (typeof old === 'function') {
      return old.apply(this, arguments)
    }
  }
}


function find0() {
  return this.values
}

function find1(firstName){
  var ret = []
  for(var i = 0; i < this.values.length; i++) {
    if(this.values[i].indexOf(firstName) === 0) {
      ret.push(this.vaules[i])
    }
  }
  return ret
}

function find2(firstName, lastName) {
  var ret = []
  for(var i = 0; i < this.values.length; i++) {
    if(this.values[i] === (firstName + ' ' + lastName)) {
      ret.push(this.values[i])
    }
  }
  return ret
}


// 使用D
addMethod(users, 'find', find0)
addMethod(users, 'find', find1)
addMethod(users, 'find', find2)

上一篇 下一篇

猜你喜欢

热点阅读