在我从{{1上下文。
this
根据我的理解,window
的值是根据其执行上下文确定的。现在当我document
函数handler
指向期望的document
时,但是当我从该上下文调用方法时,为什么我的上下文从{{1}变为$(document).ready(function() {
var handler = function() {
console.log(this); // this = window
}
console.log(this); // this = document
handler();
})
}}
提前致谢。
答案 0 :(得分:4)
在函数内部,this
的值取决于函数的调用方式。
var handler = function () {
console.log(this); // this = window
};
在这种情况下,调用不会设置this
的值。由于代码不是严格模式,因此它的值必须始终是一个对象,因此它默认为全局对象即窗口。
在全局执行上下文中(在任何函数之外),this
引用全局对象,无论是否处于严格模式。
console.log(this); // this = document
答案 1 :(得分:2)
基本上,每当你看到一个简单的函数调用,即“handler()”时,JavaScript就会像你写的一样调用它:
handler.call(null);
这与foo.handler()
不同,在这种情况下,它将以:
handler.call(foo);
如果你想在你的功能中看到document
,你需要这个:
handler.call(this);
答案 2 :(得分:0)
this关键字引用嵌套函数source中的头对象:页面号。这本书的第76页
var myObject = {
func1: function() {
console.log(this); // logs myObject
var func2 = function() {
console.log(this) // logs window, and will do so from this point on
var func3 = function() {
console.log(this); // logs window, as it’s the head object
}();
}();
}
}
myObject.func1();
因此,在你的情况下,处理函数是在ready函数中,其中this引用全局对象即window。
答案 3 :(得分:0)
像这样,上下文将保持不变:
this.handler = function() {
console.log(this); // this = document!!!
}
console.log(this);
this.handler();