我理解 this
关键字背后的一般概念,但我很难弄清楚它在实践中实际指的是什么。例如,在这两个示例练习中,我都猜错了数字。
对于问题1,我说alert会是'5',因为它指的是函数中匿名函数外的this.x。
在问题 2 中,我认为警报会是 5,因为这一行
var alertX = o.alertX;
会将变量 o 内属性 x 的值 5 绑定(bind)到新变量“alertX”,该变量成为下一行中的函数调用:alertX();
你能解释一下为什么我错了吗?
var question1 = function() {
this.x = 5;
(function() {
var x = 3;
this.x = x;
})();
alert(this.x);
};
var answer1 = 3;
var question2 = function() {
this.x = 9;
var o = {
'x':5,
'alertX':function() { alert(this.x); }
};
var alertX = o.alertX;
alertX();
}
var answer2 = 9;
最佳答案
在第一种情况下,当您调用没有显式接收器的方法时,this
是全局对象(网络浏览器中的 window
)。
与第二种情况类似:即使函数是在对象上定义的,而您在另一个对象中,通过使用 alertx()
调用函数,this
是设置为全局/窗口
。
简而言之:
- 对于
foo.bar()
,bar
中的this
将是foo
。 - 对于
bar()
,this
将是全局对象。- 这包括所谓的“自调用 lambda”,即
(function(){ ... })()
。
- 这包括所谓的“自调用 lambda”,即
- 对于
bar.call(whee)
和bar.apply(whee)
,this
将是whee
(因为这就是这些方法的作用)。
另一个例子:
var o1 = { name:"o1", f:function(){ console.log(this.name) } };
var o2 = { name:"o2" };
o2.gogogo = o1.f;
o2.gogogo(); // Will output "o2"
关于javascript - 'this' 在 Javascript 函数中指的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272503/