Я пишу онлайн-игру, которая позволяет пользователю переходить от одной головоломки к другой, и если пользователь делает ошибки, у каждой головоломки есть кнопка «Пуск снова», позволяющая пользователю запустить только эту головоломку с нуля. Упрощенная версия структуры кода приведена ниже:
function puzzle(generator) {
this.init = function() {
this.generator = generator;
...
this.addListeners();
}
//fires when the puzzle is solved
this.completed = function() {
window.theSequence.next();
}
this.empty = function() {
//get rid of all dom elements, all event listeners, and set all object properties to null;
}
this.addListeners = function() {
$('#startOver').click(function() {
window.thePuzzle.empty();
window.thePuzzle.init();
});
}
this.init();
}
function puzzleSequence(sequenceGenerator) {
this.init = function() {
//load the first puzzle
window.thePuzzle = new puzzle({generating json});
}
this.next = function() {
//destroy the last puzzle and create a new one
window.thePuzzle.empty();
window.thePuzzle = new puzzle({2nd generating json});
}
}
window.theSequence = new puzzleSequence({a sequence generator JSON});
Проблема, с которой я столкнулся, заключается в том, что если пользователь перешел ко второй головоломке, если он нажмет кнопку «Пуск», он загружает первую головоломку, а не вторую. После небольшой отладки я выяснил, что «this» при использовании в методах второй головоломки почему-то по-прежнему содержит ссылку на первую головоломку, но «window.thePuzzle» - которая должна быть такой же, как эта - правильно относится ко второй загадке.
Почему «это» сохраняется при упоминании первого?
Дайте мне знать, если вам нужно больше примеров кода