javascript
Javascript的函式宣告中的參數列表並不意味著什麼……它們純粹是為了方便訪問這些參數而放在那裡的,而並沒有限制調用者怎麼傳參數,調用者想怎麼傳就怎麼傳,只要指令碼不出錯……
所有,有時候為了保證程式的健壯性,需要實現輸入參數的驗證和預設的輸入參數。這幾天學習的過程中恰好寫了一些簡單的解決方案,放在這裡做備份。
首先是驗證類型的合法性:
function validateType( obj, type) {
if (!(obj instanceof type)) {
throw new Error("Invalid type of the argument of " + arguments.callee.caller);
}
return true;
}
然後是驗證參數值合法:
function validateValue(obj, vfunc) {
validateType(vfunc, Function); // vfunc must be Function object
if (!vfunc(obj)) {
throw new Error("Invalid value of the argument of " + arguments.callee.caller);
}
}
再是預設參數,如果參數是undefined(也就是沒有傳參數),那麼就使用指定的預設參數:
function setDefaultValue(param, defVal) {
var undefined;
if (undefined === param) {
return defVal;
} else {
return param;
}
}
OK,就這麼多了。以後還可以再加,需要什麼就做什麼吧~
它們的用法很簡單。例如函數add,假設傳入的必須是正數,而且b可以不傳,預設為10:
function add(a, b) {
var adder = setDefaultValue(b, 10);
validateType(a, Number);
validateType(adder, Number);
validateValue(a, function(n) {return n > 0 ? true: false;});
validateValue(adder, function(n) {return n > 0 ? true: false;});
return a + adder;
}
嗯,Javascript真的很有趣!