1. 程式人生 > >JavaScript模擬函式過載

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));//沒找到對應過載