我很抱歉問這樣一個基本的問題,但儘管過去幾個月在javascript上有很多的閱讀和特別是在這個問題上,我只是沒有得到它是執行上下文和「this」。所以我希望使用我的具體情況的解釋會有所幫助。我有一個構造函數,其中有一些本地函數和一些公開的函數(模仿public/private方法)。順序函數調用的執行上下文 - 這改變到窗口
function blog() {
if (!(this instanceof blog))
return new blog();
function internal(){
alert(this);
}
this.external = function(){
alert(this);
internal();
}
}
var b = new blog();
b.external();
在external
, 「本」 是B,博客的一個實例,如我所料。我錯誤地認爲這在internal
中也是如此,但它實際上是全局窗口對象。作爲一個實驗,我試着改變external
的號碼this.internal()
,這給出了this.internal不是函數的錯誤。這是當我意識到我真的沒有遵循它的工作原理。好的,我沒有定義名爲internal的博客屬性,但是如果internal不是我博客實例上定義的函數,它是什麼以及它在哪裏定義的?也許我有這個結構錯誤。
這可能重複:http://stackoverflow.com/questions/2719643/javascript-this-points-to-window-object 這一次似乎是一個更好的例子:http://stackoverflow.com/questions/12241696/why-the-code-this-point-to-window-object –
參見https://developer.mozilla.org/en-US/docs/Web/JavaScript /參考/運營商/這和http://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-context-inside-a-callback。 –