gpt4 book ai didi

javascript - 使用 setInterval 调用时,对象方法失去其作用域

转载 作者:数据小太阳 更新时间:2023-10-29 06:11:22 25 4
gpt4 key购买 nike

有没有办法像下面的例子一样打印出数组 players 的值?几个小时以来,我一直在努力寻找解决方案...

function Room(name, id, owner) {
this.players = [];
this.movementz = function() {
console.log(this.players);
}
}

我正在使用 setInterval 调用该函数,如下所示:

setInterval(room.movementz, 1000);

最佳答案

这里的问题是关于 this 对象:创建你的对象并手动调用它的 movementz 方法会起作用,因为 this 元素是对象本身,但使用setInterval 将导致使用this === window 调用该方法。

这是一个例子:

var room = new Room();

room.movementz(); // []
setInterval(room.movementz, 1000); // undefined

发生这种情况是因为当 setInterval 调用 movementz 方法时,this 对象是 window,所以,要解决此问题,您必须强制使用 room 作为 this 调用该函数。您可以使用bind 方法轻松完成此操作,下面是一个示例:

var room = new Room(),
players = "hello";

setInterval(room.movementz, 1000);
// this will output "hello" because this === window

setInterval(room.movementz.bind(room), 1000);
// this will output [], because now this === room

关于javascript - 使用 setInterval 调用时,对象方法失去其作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628920/

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