2016-05-23 47 views
0

我知道this變量指的是在全局對象(在瀏覽器的情況下,窗口)或包含它的對象(如果在對象的方法是使用),除非它有不同的規定(例如使用綁定方法)。哪裏「這個」變量是指在javascript

現在,我有以下示例:

//define an object 
var obj = { 
    param: 'Luciano', 
    bar: function() { 
     console.log('"this" inside method: ' + this); 
     return this; 
    } 
}; 

var a = obj.bar(); 
console.log(a); 
// 
var b = obj.bar; 
console.log(b()); 

輸出是:

「這個」 內部方法:[對象的對象]

對象{PARAM:「 Luciano「}

」this「裏面的方法:[object Window]

窗口{...}

我可以理解爲什麼在var a = obj.bar()的這個變量指向的情況下到obj對象。可能有人給我解釋一下,請(執行方面上下文作用域鏈)爲什麼在var b = obj.bar情況下this變量等於window對象?我預計也會等於obj

+2

那是,如果你執行函數沒有上下文的背景下將是窗口對象或undefined,如果在嚴格模式下運行JavaScript是如何工作的。 – jcubic

+1

投票重新開放。這不是重複的。儘管它確實解決了類似的問題,但它實際上是在不用'()'使用''時沒有將上下文綁定到'bar'函數。簡單的答案是「因爲事情就是這樣」,但至少需要一些解釋。 – freakish

+0

我會強烈建議在看這個:https://www.youtube.com/watch?v=nRZri_CHqnA瞭解JavaScript的範圍。 –

回答

0

你實際上var b = obj.bar; b();「(或windowthis)採取的方法objbar直接調用它,沒有this」沒有什麼是VS obj.bar()這意味着「調用方法與barobjthis」。

令人困惑的是.不僅僅是簡單的「給我一個關鍵值」,它還「綁定」了一個上下文,如果與之後的()符號一起使用的話。否則它不會。

+0

謝謝你的回答。我沒有意識到,在第二種情況下,我實際上是在沒有上下文的情況下執行函數。 – ira