2011-01-07 21 views
0

我想了解什麼是「本」我的方法內引用,該方法可以聲明如下:誰在調用我的javascript方法?

(更正爲要求的答案,但仍然沒有工作)

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

和它的顯示:

this.focused is undefined 

所以,我怎樣才能得到這個功能的調用者?

+3

這不是有效的javascript。大括號不能立即跟隨函數調用。 – 2011-01-07 19:16:53

+0

@Mike Samuel出於某種原因在這裏工作,我在一個XUL應用程序中使用這個JavaScript。我唯一不能做的就是向調用者顯示一些函數(看起來只是針對事件)。 – 2011-01-07 19:20:38

回答

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`。 – 2011-01-07 19:19:12

+0

您正在使用它在一個功能? – 2011-01-07 19:21:02

+0

是的,就像現在發佈在 – 2011-01-07 19:23:27

2

我調試這個問題的方法是添加一行

console.info(本)

如果您正在使用螢火發展,它會顯示你馬上發生了什麼事。誰「這個」取決於它從哪裏被調用 - 它可能是「窗口」對象。

0

如何:

obj = new Myclass() { 

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

你必須正確地定義你的目標,如果你會得到你所期望的結果。

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