gpt4 book ai didi

Javascript 绑定(bind)问题

转载 作者:行者123 更新时间:2023-11-30 13:05:30 25 4
gpt4 key购买 nike

这是让我感到困惑的代码片段:

var timer = 
{
start: function()
{
var self = this;

/*Why the code below doesn't write to this:
window.setInterval(self.tick, 1000).*/

//Instead, it embedded into a function like this:
window.setInterval(function(){self.tick();}, 1000)
},
tick: function()
{
console.log("tick!");
}
}

timer.start();

最佳答案

原因是JavaScript的this是动态的。当您调用如下函数时:

object.func();

this 将被设置为 object。然而,当你明明白白地调用一个函数时:

func();

或者传递给其他一些函数(包括setInterval),this会被设置为全局对象(window,通常).

因此,当您将 self.tick 传递给 setInterval 时,this inside tick 将是全局对象,而不是 timer。当你通过 function() { self.tick(); },就是self(timer)。

这里没有区别,因为tick没有访问this,但是如果tick访问了this ,你可能想使用 function() { self.tick(); },因为否则,您将修改全局对象的属性,而不是 timer

关于Javascript 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15858507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com