2013-10-31 21 views
6

ho una catena di oggetti che assomiglia a questo:requestAnimationFrame cambiamento campo di applicazione a finestra

Game.world.update() 

Vorrei utilizzare requestAnimationFrame per determinare il framerate di questa funzione.

Tuttavia quando a implementare in questo modo:

World.prototype.update = function() 
{ 
    requestAnimationFrame(this.update); 
} 

alle modifiche di ambito dall'oggetto mondo per l'oggetto finestra. Come si mantiene l'ambito desiderato durante la chiamata requestAnimationFrame()? So che ha qualcosa a che fare con funzioni anonime e simili, ma non riesco a capirlo. .

risposta

11

approccio al solito, funziona ovunque:

World.prototype.update = function() 
{ 
    var self = this; 
    requestAnimationFrame(function(){self.update()}); 
} 

O con ES5 Function.prototype.bind (compatibility):

World.prototype.update = function() 
{ 
    requestAnimationFrame(this.update.bind(this)}); 
} 
0

Un altro modo per farlo è quello di utilizzare un'espressione lambda in questo modo:

requestAnimationFrame((time) => { loop(time) });

Questo mantiene anche portata ma è un po 'più pulito.

Problemi correlati