2016-08-30 19 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

関連する問題