SOURCE

function rewriteMethod(obj, methodName, fn) {
  let oldMethod = obj[methodName]//使用oldMethod保存以前的方法
  
  obj[methodName] = function() {//重写方法
    if(fn.length === arguments.length) {//根据参数个数确定调用的方法
      fn.apply(this, arguments)
    }
    else if(typeof oldMethod === 'function') {
      oldMethod.apply(this, arguments)
    }
  }
}

var calculate = { a: 1, b: 2, c: 3}
rewriteMethod(calculate, 'add', function() {
  console.log(0)
  return 0
})

rewriteMethod(calculate, 'add', function(a) {
  console.log(this[a])
  return this[a]
})

rewriteMethod(calculate, 'add', function(a, b) {
  console.log(this[a] + this[b])
  return this[a] + this[b]
})

rewriteMethod(calculate, 'add', function(a, b, c) {
  console.log(this[a] + this[b] + this[c])
  return this[a] + this[b] + this[c]
})

calculate.add()
calculate.add('a')
calculate.add('a', 'b')
calculate.add('a', 'b', 'c')
console 命令行工具 X clear

                    
>
console