В плюсах нашел такой нюанс, как задать вечно работающие функции, когда открыто окно, в js есть тоже самое, чтобы сделать это через while или только setInterval в js уместно?
Hyubert: Зачем он записывает св-во go отдельно через прототип, а не в функции через this?
var Animal=function(id){
this.onGo=new Publisher();
this.id=id;
this.domElement=$('#'+id);
this.from=parseInt(this.domElement.css('left'));
}
Animal.prototype.go=function(to,duration){
var start = new Date().getTime();
var that=this;
setTimeout(function() {
var now = (new Date().getTime()) - start;
var progress = now / duration;
if(progress > 1) progress = 1;
var result = (to - that.from) * progress + that.from;
that.domElement.css('left', result+'px');
that.onGo.deliver(progress);
if (progress < 1)
setTimeout(arguments.callee, 10);
}, 10);
}
Hyubert: и в чём смысл этой строки? var that=this;
в
Animal.prototype.go=function(to,duration){
var start = new Date().getTime();
var that=this;
setTimeout(function() {
var now = (new Date().getTime()) - start;
var progress = now / duration;
if(progress > 1) progress = 1;
var result = (to - that.from) * progress + that.from;
that.domElement.css('left', result+'px');
that.onGo.deliver(progress);
if (progress < 1)
setTimeout(arguments.callee, 10);
}, 10);
}
Ingernirated: Подучите немного JS, по поводу that - если вы сделаете this.form в колбэке setInterval'а, тогда this будет ссылаться на контекст колбэк функции, в данном же случае у вас that ссылается на контекст объекта Animal.
Ingernirated: Если вы будите создавать свойства или методы через this, то при каждом инстансе такого объекта они будут создаваться вновь, что приведет к большему потреблению памяти. Если же вы запишите свойства через прототип, при инстансе они просто возьмутся из прототипа. Но тут опять же, если у вас не будет много инстансов такого объекта - можете и через this записать.