javascript - Module/prototype and multiple instances -
i'm trying grip on "oop" javascript techniques, , began writing small test application today. basically, it's game loop , on each update coordinates increased html element moves.
the problem want able run more 1 instance of app, , therefore i'm trying store instance data in this, saved in constructor , exec() method not available in private update() method. seems officer, problem?
var jsloth = (function () { var jsloth = function () { var sloth = document.createelement('div'); var attr = document.createattribute('class'); attr.value = 'sloth'; sloth.setattributenode(attr); this.sloth = document.getelementsbytagname('body')[0].appendchild(sloth); }; var exec = function () { this.x = 0; this.y = 0; var = this; setinterval(function () { that.update(); }, 1000/10); }; var update = function () { this.x++; this.y++; this.sloth.style.left = this.x + 'px'; this.sloth.style.bottom = this.y + 'px'; }; jsloth.prototype.constructor = jsloth; jsloth.prototype.exec = exec; jsloth.prototype.update = update; return jsloth; })(); var sloth1 = new jsloth(); sloth1.exec(); edit: updated code working solution!
you've not added update prototype. value of this in method window object.
change call this:
update(); to this:
update.call(this); or add update .prototype:
jsloth.prototype.update = update; and use:
this.update(); but if you're going call update() setinterval(), you'll need ensure proper this value.
to that, can pass anonymous function, , keep reference outer this value in variable.
var exec = function () { this.x = 0; this.y = 0; var = this; setinterval(function() { that.update(); //update.call(that); // if didn't add update() .prototype }, 1000/10); };
Comments
Post a Comment