У меня есть код Javascript, который отлично работает до сих пор, но я не понимаю, как переменная «me» установлена в функции «run»?Как работает неявная передача ссылки на объект?
GameLoop.prototype.run = function() {
this.startTime = new Date().getTime();
var currentTimeMillis = this.startTime;
var loops;
var interpolation=0.0;
this.running=true;
return function(me){
loops = 0;
while (new Date().getTime() > currentTimeMillis && loops < me.MAX_FRAMESKIP) {
me.updateGame();
currentTimeMillis += me.SKIP_TICKS;
loops++;
}
interpolation = parseFloat(new Date().getTime() + me.SKIP_TICKS - currentTimeMillis)/parseFloat(me.SKIP_TICKS);
me.drawGame(interpolation);
}
}
Эта функция вызывается непрерывно функции живого браузера ниже. Поскольку я не передаю ссылку на вызов f.run(), я думаю, что правильная ссылка на меня задана неявно. Может кто-нибудь объяснить мне или дать мне полезные ссылки, объясняющие это поведение?
GameLoop.prototype.recursiveAnim = function() {
var f = this.run();
f.run();
this.animFrame(this.recursiveAnim);
};
Ничего себе. Thx для быстрого ответа :). Я понимаю, что вы заявили, но в моем случае f.run(); вызывается без прохождения какого-либо параметра. Я не понимаю, почему я ссылаюсь на этот объект GameLoop? В вашем случае вы передаете значение me (f (1) ... но у меня есть f.run()) – thompson
'f' - это функция в вашем случае, которая не имеет свойства' run'. Вы должны дважды проверить свой код на предмет, который, возможно, забыл опубликовать. – Tibos
Проклятье ... ты был прав. Я наблюдал за тем, где я его передаю ... о: D .... иногда кто-то должен сказать вам очевидное: D ..... так проблема решена. Спасибо. Я никогда не использую функцию recursiveAnim .... ups :) – thompson