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"));

 

posted on 2015-12-24 17:21  小武爷  阅读(188)  评论(0编辑  收藏  举报