JavaScript模擬函式過載
阿新 • • 發佈:2019-02-06
在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));//沒找到對應過載