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
)。看,哇!谢谢你,马可,这让我有一段时间感到困惑。