js 如何在函數體內部知道 自己在哪個函數內運行呢?
打比方:
function a() { // 我想在這里知道我的函數名a和函數function a () {...} }
使用Error的調用棧可以匹配到當期執行的函數:
// 獲取正在執行的函數 function getExecFunction() { let names = new Error().stack.match(/at (.*?) /g); let name = names[1].replace('at ', '').trim(); return eval(name); }
Use Ex:
function a() { console.log(getExecFunction()); } function getExecFunction() { let names = new Error().stack.match(/at (.*?) /g); let name = names[1].replace('at ', '').trim(); return eval(name); } a(); //[Function: a]
如果是在class內部,可以這么寫(代碼基於ES6):
class A { // 獲取正在執行的函數 getExecFunction() { let names = new Error().stack.match(/at A\.(.*?) /g); let name = names[1].replace('at A.', '').trim(); return eval(`this.${name}`); } a() { console.log(this.getExecFunction()); } } new A().a(); // [Function: a]
如有錯誤,請指正,感謝。
