我想獲得一個JavaScript實例或類方法的名稱(在客戶端/瀏覽器JS),而使用以下OOP風格AMD模塊(用於RequireJS使用):如何從方法內部獲取JavaScript類/實例方法的名稱?
define([...], function(...) {
var FooBar = function() {
//Constructor code...
};
FooBar.foo = function() {
//This is a FooBar class method named "foo". How do I get its name from here?
//...
};
FooBar.prototype.bar = function() {
//This is a FooBar instance method named "bar". How do I get its name from here?
//...
};
});
我已經看到各種帖子解釋如何在命名函數(例如,函數foobar(){...})的情況下做到這一點,但不是在指定匿名函數的情況下,例如foobar = function(){...}。
後者與此處相關,除非上述內容可以改爲使用命名函數來代替。
我寧願不回覆到一些命名方案的約定,如foobar = function foobar_extra_name(){...},因爲這涉及命名一個函數兩次。此外,即使這是可能的,仍然不可能像FooBar.prototype.bar = function FooBar.prototype.bar(){...}這樣做,因爲它是點符號,所以它不會是很多幫助。
對此有何想法?任何幫助是極大的讚賞。
究竟什麼是你的使用情況?在最簡單的情況下,你不需要「獲取」這個名字,因爲你知道這個名字是「foo」。 – Bergi
匿名函數沒有名字。如果將相同的功能分配給兩個不同的屬性,您認爲會發生什麼? – Bergi
@Bergi:用例是一種情況,我希望在函數中顯示一條錯誤消息以進行調試,而無需在控制檯中手動擴展堆棧跟蹤。快速打印功能名稱就足夠了。我只是想知道是否有某種機制可以做到這一點(我不想在函數中重複該名稱,因爲我想避免重複揮發性信息,以防我會更改函數名稱)。但是當談到你的第二條評論時你是對的;我只是希望函數被調用的方式會提供一些額外的信息。 – Danny