注意:获取函数的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,女