2012-11-03 73 views

回答

2

this指向窗口。如果你想指的是功能,用途:

arguments.callee.is_global = "Yes!"; 

現在:

window.is_global; //undefined 
boo.is_global; //"Yes!" 

的另一種方法是簡單地指通過自己的名稱屬性添加到它的時候噓。

function boo() { 
    boo.is_global = "Yes!"; 
} 

請注意,這會修改原始的boo函數對象。如果您希望修改所有實例boo而不是將其作爲構造函數使用,請參閱此處的其他答案。

+0

你不能使用'arguments.callee'是嚴格模式;這是最好的避免。 – Quentin

+0

@Quentin好吧,增加了一個替代方案。 –

+0

所以使用'var is_global =「Yes」;'和'boo.is_global =「是!」之間有什麼區別? –

5

是的,這是正常的行爲。如果您的功能是全局定義的,則this只是window,而添加到window的任何內容都是全局的。

1

要讓this成爲「正在調用的函數」,則必須將該函數作爲對象構造函數調用(使用new)。

var foo = new boo(); 

這將創建一個boo例如財產is_global。這不會在構造函數本身上創建一個屬性。 See a demo

如果您不使用new(或諸如apply的方法),則this是「調用該函數的對象」。由於在這種情況下沒有對象,因此使用默認對象。在Web瀏覽器的情況下,默認對象是window。所以:

var foo = boo(); 

相同

var foo = window.boo(); 

thiswindowboo

相關問題