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