Javascript 当使用setInterval调用对象方法时,对象方法将丢失其作用域

Javascript 当使用setInterval调用对象方法时,对象方法将丢失其作用域,javascript,Javascript,是否有任何方法可以像下面的示例那样打印出数组players的值?我已经找了几个小时的解决办法了 function Room(name, id, owner) { this.players = []; this.movementz = function() { console.log(this.players); } } 我使用setInterval调用函数,如下所示: setInterval(room.movementz, 1000); 这里的问题是

是否有任何方法可以像下面的示例那样打印出数组
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
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
这是因为当
setInterval
调用
movementz
方法时,
This
对象是
window
,因此,要解决此问题,必须使用
room
作为
This
强制调用函数。您可以使用
bind
方法轻松完成此,下面是一个示例:

var room = new Room();

room.movementz(); // []
setInterval(room.movementz, 1000); // undefined
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

应该有用。你怎么称呼这个方法。和:如何创建调用方法的对象。注意:功能名称可能有输入错误。你自己试过吗?我通过设定时间间隔(movementz,100)来调用它。*叹气*请将此添加到您的帖子中。你想做什么,你期望什么,结果是什么。我运行了
var r=newroom();r、 movementz()//和get[]正如我预期的那样
hmm,大多数可能是setinterval(movementz,100)有问题,因为我在正常调用它时得到了预期的结果。当
setinterval()
调用
movementz()
时,它可能没有您预期的上下文(
this
)。看,哇!谢谢你,马可,这让我有一段时间感到困惑。