js獲取指定函式的形參程式碼例項

螞蟻小編發表於2017-03-27

獲取函式形式引數的數目非常的簡單,使用函式物件的length屬性即可。

但是有可能可能需要更為精確一點,那就是獲取函式的形參具體是什麼。

下面就是一段能夠實現此功能的程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
function getFuncParameters(func){
  if(typeof func=='function'){
    var mathes = /[^(]+\(([^)]*)?\)/gm.exec(Function.prototype.toString.call(func));
    if(mathes[1]){
      var args=mathes[1].replace(/[^,\w]*/g, '').split(',');
      return args;
    }
  }
}
function done(x,y,z){
  //code
}
console.log(getFuncParameters(done));

上面的程式碼實現了我們的要求,下面介紹一下此功能的實現過程。

一.程式碼註釋:

1.function getFuncParameters(func){},引數是要獲取引數的函式物件。

2.if(typeof func=='function'),判斷引數是不是函式。

3.var mathes = /[^(]+\(([^)]*)?\)/gm.exec(Function.prototype.toString.call(func)),這個程式碼是重點,下面做一下分解:Function.prototype.toString.call(func)此程式碼能夠獲取函式func的原始碼字串,前面的正規表示式可以匹配函式原始碼字串的函式名稱和括號中內容,包括括號。

4.if(mathes[1]),判斷匹配結果陣列中的第二元素是否存在,也就是正規表示式第一個字表示式是否匹配了內容,在上面的正規表示式中,第一個字表示式匹配的內容就是函式的引數內容,例如"x,y,z"。

5.var args=mathes[1].replace(/[^,\w]*/g, '').split(','),把非字母和逗號都地換位空字元,然後用逗號分隔生成一個陣列。6.return args,返回這個陣列。

二.相關閱讀:

1.exec()函式可以參閱正規表示式exec()函式一章節。

2.call()函式可以參閱js call()函式用法介紹一章節。

3.replace()函式可以參閱正規表示式使用replace()函式簡單介紹一章節。

4.split()函式可以參閱javascript split()函式使用介紹一章節。

相關文章