2011-01-07 16 views
0

私は、「これは」私のメソッドの内部で参照する、方法がように宣言されているかを理解しようとしている:誰が私のjavascriptメソッドを呼び出していますか?

(を求めた答えとして修正、まだ動作していない)

Myclass = function() { 
    this.focused = function() { 
     alert("caller = " + this.focused.caller); 
    } 
} 
var obj = new Myclass(); 

と表示されています:

this.focused is undefined 

この関数の呼び出し元を取得するにはどうすればよいですか?

+3

これは有効なjavascriptではありません。中括弧は関数呼び出しの直後には置かれません。 –

+0

@Mike Samuel何らかの理由でここで動作しますが、私はXulアプリケーション内でこのjavascriptを使用しています。私がすることができない唯一のことは、呼び出し元にいくつかの関数(イベントのみのように見える)を表示することです。 –

答えて

0

問題が

window.onfocus = self.focused; 

と、それは働いていなかったが、

var self = this; 
window.addEventListener("focus", function() { self.focused(); }, false); 

でそれがうまく機能し、登録イベントにあったように見えます。..

私はちょうどそれがなぜうまくいかないのかと不思議に思う:

var focused = this.focused; 
window.addEventListener("focus", function() { focused(); }, false); 
1

あなたは使用することができます。

var name = arguments.callee.caller.name; 
+0

それは何も印刷しませんでした。 'arguments.callee.caller'を印刷すると、' null'が表示されます。 –

+0

あなたは関数の権利でそれを使用していますか? –

+0

はい、ちょうど質問.. –

2

を私はこれをデバッグするような方法は、あなたが放火犯を使用して開発されている場合は、それが表示されますラインに

console.info(この)

を追加することですあなたは何が起こっているかすぐに。 「this」は、どこから呼び出されているかによって異なります。これは「ウィンドウ」オブジェクトである可能性があります。あなたが期待する結果を得ようとしている場合は、正しくオブジェクトを定義する必要があります

obj = new Myclass() { 

    this.focused = function() { 
     alert("caller = " + Function.caller.name); 
    } 
} 
+0

"どこから呼び出されているかによって異なりますが、それは私が発見しようとしているものです。") –

0

Myclass = function() { 
    this.focused=function() { 
    alert("caller = " + this.focused.caller); 
    }; 
} 
obj = new Myclass(); 
+0

これは何も表示せず、Function.callerにnullを表示します –

+0

関数自体の名前を使用します。http:// www.c-point.com/javascript_tutorial/jsfunCaller.htm – trojanfoe

+0

これは私がやったことで、 'this.focused is undefined'と表示されます。 –

0

:どの程度

+0

'var obj = new Myclass'でも修正されましたが、' this.focused is undefined'というエラーが出力されます。 –

関連する問題