[英]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
,所以,要解決這個問題, 你必須強制使用被稱為功能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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.