2015-07-18 3 views
0

Я пишу небольшое приложение в JavaScript, и у меня есть класс и прототип метода.setInterval создает новый объект

function Canvas(_canvasId, _page) { 
    this.c = document.getElementById(_canvasId); 
    this.ctx = this.c.getContext("2d"); 
    this.page = _page; 
}; 

Canvas.prototype.draw = function() { 
    console.log(this); 

    switch (this.page) { 
     case "_CitySystem": 
      //this.renderCitySystem(); 
      break; 
    } 
}; 

Я затем создать новый экземпляр и вызвать метод рисования:

$(document).ready(function() { 
    var g = new Canvas("cCity", "_CitySystem"); 
    setInterval(g.draw, 1000); 
}); 

Проблема, которую я имею что когда я

console.log(this); 

Я ожидал, что это выход на Свойства объекта холста, вместо этого я получаю свойства объекта окна:

enter image description here

Однако это я

d.draw(); 

Без setInterval, консольный вывод, что я ожидаю, что это будет, так и в обратном вызове в setInterval, конечный результат другой объект, как я могу сказать setInterval что я хочу использовать свойства объекта того, что я прошел?

ответ

0

Заменить g.draw на function() { g.draw(); }.

+0

'g.draw.bind (г)' также работает –

+0

Просто есть некоторые избыточность. –

-2

Когда вы звоните setInterval или setTimeout, вы действительно вызываете его против window.

Вам необходимо пройти контекст, который может быть сделано с jQuery.proxy:

setInterval($.proxy(g.draw, g), 1000); 

См документации по адресу: https://api.jquery.com/jQuery.proxy/

Смежные вопросы