2015-07-11 34 views
1

這裏面是我的代碼:獲取的函數名對象

var structure = { 
A: function() { 
    this.B(); 
}, 

B: function() { 
     console.log(arguments.callee.caller.toString()); 
} 

};

然後我運行:

structure.A(); 

正如你明白,我試圖讓調用函數的名稱,但結果是空字符串。有任何想法如何做到這一點?

+3

那麼,這兩個函數都沒有名稱。屬性名稱在技術上不是函數的名稱。相關:http://stackoverflow.com/q/17557957/218196。但問題是:爲什麼要這樣做?你想解決什麼問題? –

+0

我猜測OP確實希望'arguments.callee.caller.toString()'在他調用'structure.B()'時返回'A'。那是正確的,@snith? –

+0

是的,你是對的。 –

回答

0

我已經添加了函數名稱A,並稍微更改了獲取要打印的字符串的語句。這是否做你想要的?

var structure = { 
    A: function A() { 
     this.B(); 
    }, 
    B: function() { 
     console.log(arguments.callee.caller.name); 
    } 
} 

structure.A(); 
+0

我可以在沒有重命名的情況下得到相同的結果嗎? –

+0

我不這麼認爲。可能有任何數量的變量被分配給你的匿名函數,如果你想得到它,函數需要有自己的名字。你爲什麼要這樣做?也許你可以考慮一種不同的方法,完全避免這種情況? – Iain