正如你現在所知,沒有本地方法來獲得「傳遞參數和默認參數不傳遞」。但有一種變通方法:
此功能(我發現here)獲取給定函數的所有參數:
function getArgs(func) {
var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
return args.split(',').map(function(arg) {
return arg.replace(/\/\*.*\*\//, '').trim();
}).filter(function(arg) {
return arg;
});
};
因此,結合你的函數myFunction
的arguments
這個功能,我們可以得到一個有你想要的數組:
function myFunction (arg1, arg2 = "bob") {
var thisArguments = arguments;
console.log(getArgs(myFunction, thisArguments));
};
function getArgs(func, argums) {
var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1];
var argsArray = args.split(',').map(function(arg) {
return arg.replace(/\/\*.*\*\//, '').trim();
}).filter(function(arg) {
return arg;
});
for(var i = 0; i < argsArray.length; i++){
argsArray[i] += " (default)";
}
var defaults = argsArray.slice(argums.length);
argums = Array.prototype.slice.call(argums);
return argums.concat(defaults);
};
現在,我們可以看到在控制檯上的信息打電話myFunction
:
1.傳遞比參數多的參數
這將只返回參數。
myFunction("foo", "bar", "baz");
//returns: ["foo", "bar", "baz"]
2.傳遞少參數比參數
將返回的參數,其餘參數爲默認值,只要你想(我加了「默認」每個字符串)。
myFunction("foo");
//returns ["foo", "arg2 = "bob" (default)"]
3傳遞任何參數
這將返回所有的參數。
myFunction();
//returns ["arg1 (default)", "arg2 = "bob" (default)"]
這是小提琴:https://jsfiddle.net/gerardofurtado/25jxrkm8/1/
我我的答案更新,只是爲了好玩......看看。 –