var ninja = {};
addMethod(ninja,'whatever',function(a){console.log(arguments.length);});
addMethod(ninja,'whatever',function(a,b){console.log(arguments.length);});
addMethod(ninja,'whatever',function(){console.log(arguments.length);});
function addMethod(object,name,fn){
var old = object[name];
object[name] = function(){
if(fn.length == arguments.length)
return fn.apply(this,arguments);
else if (typeof old == 'function')
return old.apply(this,arguments);
};
}
ninja.whatever();
这是一段出自《Secrets of the JavaScript Ninja》的代码,作者说它的作用是实现函数的重载,但是对于整个的运行过程我还是理解不透,麻烦懂的人解释一下。
我猜你主要是没看懂
apply
方法https://msdn.microsoft.com/zh-cn/library/4zc42wh1(v=vs.94).aspx