2016-05-23 117 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