javascript 函数重载另一种实现办法
最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解。
先上代码:
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); }; } } var ninjas = {values:["dean Edwards","sam Stephenson", "Alex Russell"]}; addMethod(ninjas,"find",function(){ return this.values; }); addMethod(ninjas,"find",function(name){ var ret = []; for(var i=0; i<this.values.length;i++){ if(this.values[i].indexOf(name) == 0){ ret.push(this.values[i]); } } return ret; }) addMethod(ninjas,"find",function(fname,lname){ var ret = []; for(var i=0;i<this.values.length;i++){ if(this.values[i] == fname + ' ' + lname){ ret.push(this.values[i]); } } return ret; }) console.log(ninjas.find()); console.log(ninjas.find("Alex")); console.log(ninjas.find("dean","Edwards"));