JavaScript模拟函数重载

在Java等语言里面实现函数的重载是比较简单的,参数数量不同就能实现同名函数的重载,而JavaScript中的参数本质上还是arguments这个类数组的引用,不能直接更具参数数量的不同而达到重载,这里使用的闭包实现函数重载:一层一层去寻找合适的函数去执行,代码如下:

function setOverload(target, fn) {
    //注意,target只是原函数的引用,修改这个引用不会直接修改原函数,所以return
    var oldTarget = target;
    target = function(){
        if (arguments.length === fn.length) {
            return fn.apply(this, arguments);
        } else {
            //如果参数数量不符,就继续往原来的函数上去执行
            return oldTarget.apply(this, arguments);
        }
    };
    return target;
}

//测试函数
function method(){
    return "没找到对应重载";
}

method = setOverload(method, function(a){return a;});
method = setOverload(method, function(a,b){return a+b;});
method = setOverload(method, function(a,b,c){return a+b+c;});

console.log(method(1));//1
console.log(method(1,2));//3
console.log(method(1,2,3));//6
console.log(method(1,2,3,4));//没找到对应重载


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章