注意:获取函数的length得到的是形参的个数
function addMethods(object, name, fn) {
let old = object[name]; //把初始传入的方法存在一个临时变量old中,
object[name] = function(...args) { //重写传入的方法,
if (fn.length === args.length) { // 如果调用object[name]时,如果传入的参数与预期的一致,则直接调用。
fn.apply(this, args);
} else if (typeof fn === 'function') { // 否则判断old是否为函数,如果是,就调用
old.apply(this, args);
}
}
}
addMethods(window, 'fn', (name) => {
console.log(name)
});
addMethods(window, 'fn', (name, age) => {
console.log(name, age)
});
addMethods(window, 'fn', (name, age, sex) => {
console.log(name, age, sex)
});
fn('ying');
fn('ying', 18);
fn('ying', 18, '女');
// 结果:
// 'ying'
// 'ying',18
// 'ying',18,女