javascript - Setting correct this-value in requestAnimationFrame -


i have app-object constructer looks this:

var app = function(loadedsettings) {      return {         init: function() {                       this.loop();         },          loop: function() {             this.update();             window.requestanimationframe(this.loop);         },          update: function() {             //loop through settings , call update on every object.         },          settings: [              //array of settings objects, update methods.          ]     }; } 

then when do:

var theapp = app(settings); theapp.init(); 

i get:

uncaught typeerror: object [object global] has no method 'update' 

because when requestanimationframe called, this-value inside loop function set window.

does know how call requestanimatinframe 'theapp' object set this-value?

you can create bound function (with fixed this), , pass requestanimationframe:

var app = function(loadedsettings) {      return {         init: function() {                       this.loop();         },          loop: function() {             this.update();             window.requestanimationframe(this.loop.bind(this));         },          update: function() {             //loop through settings , call update on every object.         },          settings: [              //array of settings objects, update methods.          ]     }; } 

i think browser supports requestanimationframe support function.prototype.bind, in case come across 1 doesn't, there polyfills available.


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

keyboard - C++ GetAsyncKeyState alternative -

android - java.net.UnknownHostException(Unable to resolve host “URL”: No address associated with hostname) -