使用setInterval调用时,Object方法会失去其作用域

时间:2014-12-23 22:25:35

标签: javascript

有没有办法打印出数组players的值,如下例所示?我现在试着找几个小时的解决方案......

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

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

setInterval(room.movementz, 1000);

1 个答案:

答案 0 :(得分:6)

此处的问题与this对象有关:创建对象并手动调用它的movementz方法将起作用,因为this元素是对象本身,但< strong>使用setInterval会导致使用this === window 调用该方法。

以下是一个例子:

var room = new Room();

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

这是因为当movementz方法被setInterval调用时,this对象为window,因此,为了解决此问题,你&#39;我必须强制使用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