簡體   English   中英

使用setInterval調用時,Object方法會失去其作用域

[英]Object method loses its scope when called using setInterval

有沒有辦法打印出如下例所示的陣列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

這是因為當movementz方法被調用方式setInterval ,在this對象是window ,所以,要解決這個問題, 你必須強制使用被稱為功能roomthis 您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM