通过MDN阅读并遇到了这个
function Person() {
// The Person() constructor defines `this` as an instance of itself.
this.age = 0;
setInterval(function growUp() {
// In non-strict mode, the growUp() function defines `this`
// as the global object, which is different from the `this`
// defined by the Person() constructor.
this.age++;
}, 1000);
}
var p = new Person();
为什么函数this
中的growUp()
绑定到window
?
答案 0 :(得分:0)
'这'在setTimeout处理程序中引用窗口对象,因为Person对象的上下文消失了,之后setTimeout回调函数引用了窗口对象。
答案 1 :(得分:0)
因为this
没有绑定任何其他内容。
如果它没有绑定,则在调用默认对象时绑定它。默认为全局window
对象。
如果您需要将其绑定到人,您可以使用bind
函数明确地执行此操作:
function Person() {
this.age = 0;
setInterval(function growUp() {
this.age++;
}.bind(this), 1000);
}
var p = new Person();
编辑:
在javascript中,您有两种调用函数的方法:
作为功能本身
function f() {}
f();
作为对象的属性
var obj = {
f: function() {}
};
obj.f();
通过对象原型:
function X() {}
X.protoype.f = function() {}
var x = new X();
x.f()
对于第一种情况,this
未定义,需要设置为某种情况。默认情况下,它是全局对象(浏览器中的window
对象)。
对于第二个和第三个案例this
设置为点之前的对象。'它们只是如何找到函数。