2016-08-30 238 views
3

是否可以在此代碼中獲得字符串「markHotel」?JavaScript - 獲取調用函數的名稱

this.markHotel = this.markPrice = function() { 

    // get "markHotel" 

}; 

this.markHotel(); 
+0

http://stackoverflow.com/questions/2648293/javascript-get-function-name –

+0

@RobM。這裏的問題是函數本身是匿名的,沒有名字。我不確定你可以做OP在這裏要求什麼。 –

+0

我認爲唯一可以做到這一點的方法就是拋出一個異常,抓住它,並解析特定於平臺的堆棧,並且沒有義務包含它。所以不是真的,但是完好的代碼應該不需要。 –

回答

1

你可以使用Function.prototype.bind()。這裏有一個簡單的例子:

function base() { 
    console.log(this.name); 

    // do some other stuff using this.name or other this props... 
} 

var markPrice = base.bind({ name: 'markPrice' }); 

var markHotel = base.bind({ name: 'markHotel' }); 

// this will log 'markPrice' 
markPrice(); 

// this will log 'markHotel' 
markHotel(); 

它看起來就像你可能會做這樣的類構造函數裏面,但它不是從你的例子完全清楚。如果是這樣,請確保不要混淆類構造函數的「this」上下文和「base」函數的「this」上下文,後者在設置markPrice和markHotel時會被手動綁定。

文檔,以便綁定:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

這裏有一個筆:http://codepen.io/bsidelinger912/pen/QKLvzL