对Function进行扩展:
Function.prototype.getName = function(){
return this.name || this.toString().match(/function\s*([^(]*)\(/)[1]
}
Function.prototype.getParamKeys = function(){
let _funStr = this.toString();
// let _param = this.toString().match(/function\s*([^(].+[\)$])/)[1];
// _param = _param.substring(this.getName().length + 1, _param.length-1);
let _param = _funStr.substring(_funStr.indexOf('(')+1, _funStr.indexOf(')'));
if(_param.length<=0)return [];
_param = _param.split(',').map(function(keyName){ // 清洗多余字符
return keyName.match(/\w+/)[0]
});
return _param;
}
示例:
function t(column,type, test = {}) {
console.log('column,type:', column,type)
}
function t2(column) {
console.log('column:', column)
}
function t3() {
}
console.log(t.getParamKeys()) // ["column", "type", "test"]
console.log(t2.getParamKeys()) // ["column"]
console.log(t3.getParamKeys()) // []