私は多くのオブジェクトと関数(オブジェクトメソッド)からなるjavascriptアプリケーションを開発しています。私は、アプリケーションのライフサイクルで多くのイベントを記録できるようにしたいと考えています。私の問題は、ロガー内では、どの機能がログエントリを呼び出したのかを知りたいので、そのデータをログメッセージとともに保存することができます。これは、すべての関数が何らかの形で自身を参照できる必要があることを意味するので、その参照をロガーに渡すことができます。 javascript strictモードを使用しているため、関数内でarguments.callee
を使用することはできません。独自の実装から関数を参照するには?
ここでは、実行できる非常に単純化されたコードサンプルを示します。私は簡単にするために私のロガーの代わりにここでalert
を使用しています。最初の警告で
(function(){
"use strict";
window.myObject = {
id : 'myObject',
myFunc : function(){
alert(this.id); // myObject
alert(this.myFunc.id); // myFunc - I don't want to do this. I want something generic for all functions under any object
alert('???') // myFunc
alert(arguments.callee.id); // Will throw an error because arguments.callee in not allowed in strict mode
}
}
myObject.myFunc.id = 'myFunc';
myObject.myFunc();
})();
- -
this
二Iの警告でmyFunc
- に
myObject
ずに関連する - 私は私のように、私はしたくない、その名前によって機能を参照しました独自の実装から関数を参照する一般的な方法を探しています。 - 3番目のアラート - あなたのアイデアを公開します。
- 第4のアラートは、私が
"use stict";
を入力しなかった場合にはうまくいったでしょう。私はより良いパフォーマンスを提供するので、厳密なモードを維持したい、良いコーディング練習を構成します。
すべての入力をいただければ幸いです。
あなたが「strictモード」に慣れていない場合は、これはそれについて読むには良い場所です: JavaScript Strict Mode
ありがとう!それらはクールなソリューションです:) –