2013-12-07 2 views
0

У меня есть код 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); 
    }; 

ответ

0

Позвонив run вы получите функцию в ответ, что функция имеет один параметр и его называют me.

Например

var x = function() { return function (me) { return me; } } 
// by calling x, you get the function: `function (me) { return me; } 
var f = x(); 
console.log(f(1)); // answer is 1 
+0

Ничего себе. Thx для быстрого ответа :). Я понимаю, что вы заявили, но в моем случае f.run(); вызывается без прохождения какого-либо параметра. Я не понимаю, почему я ссылаюсь на этот объект GameLoop? В вашем случае вы передаете значение me (f (1) ... но у меня есть f.run()) – thompson

+0

'f' - это функция в вашем случае, которая не имеет свойства' run'. Вы должны дважды проверить свой код на предмет, который, возможно, забыл опубликовать. – Tibos

+0

Проклятье ... ты был прав. Я наблюдал за тем, где я его передаю ... о: D .... иногда кто-то должен сказать вам очевидное: D ..... так проблема решена. Спасибо. Я никогда не использую функцию recursiveAnim .... ups :) – thompson

Смежные вопросы