Ich schreibe ein JavaScript-Programm, das die Methode eines Objekts jede Sekunde ausführt. Die Methode protokolliert nur die Objekteigenschaft "x" und fügt dann eine hinzu."this" gibt zurück undefined
Die Klasse, aus der das Objekt ("Player" genannt) konstruiert wird, heißt "Snake", und die Eigenschaft "x" ist eindeutig als 0 definiert. Wenn ich jedoch meine "everyTick" -Funktion durchführe, protokolliert sie ' nicht definiert'.
Das ist sehr seltsam, weil die Methode auch player.x protokolliert, was genau das tut, was es sollte. Aber wenn ich "this" anstelle von "player" verwende, loggt es undefined. Kann jemand erklären, warum und wie man es repariert?
Hier ist der Code.
var FPS = 1;
var toBeRun = {
func: function() {},
index: 0
};
function tickFunction(func) {
this.func = function() {
func();
}
}
function everyTick() {
toBeRun.func()
setTimeout(function() {everyTick();}, 1000/FPS);
}
function forever(func) {
toBeRun = new tickFunction(func);
}
function Snake() {
this.x = 0;
this.say = function() {
console.log(player.x);
console.log(this.x);
player.x++;
this.x++;
}
}
var player = new Snake();
function start() {
forever(player.say);
}
everyTick();
Es ist wirklich verwirrend, wenn man sieht es einfach so, so ist es hier in CodePen: http://codepen.io/Plygon/pen/jqJZvq?editors=0011
Meine Klasse Zeitraum gerade zu Ende gegangen, so kann ich Ihre Antwort jetzt nicht überprüfen, aber dank! – Polygon