Window.local storage
Добрый день уважаемые гуру.
Помогите пожалуйста разобраться. Пытаюсь сделать игру камень ножницы бумага: HTML: <body> <div> <p>Камень ножницы бумага</p> <button onclick=" resultsTableEntry(rockCode) console.log(score); " class="rock-btn"> Камень </button> <button onclick=" resultsTableEntry(scissorCode) console.log(score); " class="scissor-btn"> Ножницы </button> <button onclick=" resultsTableEntry(paperCode) console.log(score) " class="paper-btn"> Бумага </button> <button onclick="resetScore()">Сбросить счет!</button> <p class="score-output"></p> </div> <script src="source/javascript/r_s_p.mjs"></script> </body> JS: Простите за кучу if else, позже обязательно попробую это все улучшить //Переменные выбора пользователя, передаваемые в функцию //для сравнения с выбором компьютера const rockCode = 'Камень'; const scissorCode = 'Ножницы'; const paperCode= 'Бумага'; // Объект для хранения результатов игры const resultsTable = { ties: 0, wins: 0, losses: 0 }; // Пытаюсь записать результат в памяти компьютера, чтоб при //обновлении страници не обнулялся resultTable const score = JSON.parse(localStorage.getItem('resultsTable')); // Рандомный выбор для компьютера const randomNumb = () => { let randomNumb = Math.random(); if (randomNumb.toFixed(3) <= 1 / 3) { randomNumb = rockCode; } else if (randomNumb.toFixed(3) > 1 / 3 && randomNumb.toFixed(3) < 2 / 3) { randomNumb = scissorCode; } else if (randomNumb.toFixed(3) > 2 / 3 && randomNumb.toFixed(3) < 1) { randomNumb = paperCode; } return randomNumb; }; //Сравнение выбора машины и выбора пользователя const res = (userChoice) => { const computerChoice = randomNumb(); let message; if (userChoice === rockCode && computerChoice === rockCode){ message = 'Ничья не взяла'; }else if(userChoice === rockCode && computerChoice === scissorCode){ message = 'Usver WIN'; }else if(userChoice === rockCode && computerChoice === paperCode){ message = 'MACHINE WIN'; ; }else if(userChoice === scissorCode && computerChoice === rockCode){ message = 'MACHINE WIN'; }else if(userChoice === scissorCode && computerChoice === scissorCode){ message = 'Ничья не взяла'; }else if(userChoice === scissorCode && computerChoice === paperCode){ message = 'Usver WIN'; }else if(userChoice === paperCode && computerChoice === rockCode){ message = 'Usver WIN'; }else if(userChoice === paperCode && computerChoice === scissorCode){ message = 'MACHINE WIN'; }else if(userChoice === paperCode && computerChoice === paperCode){ message = 'Ничья не взяла'; } return message; }; // Сброс очков const resetScore = () => { resultsTable.wins = 0; resultsTable.ties = 0; resultsTable.losses = 0; alert(` Победы: ${resultsTable.wins} Ничьи: ${resultsTable.ties} Поражения: ${resultsTable.losses}`); }; //Итоговая функция для сохранения очков в обьект resultsTable const resultsTableEntry = (userChoice) => { const duelResult = res(userChoice); if (duelResult === 'Ничья не взяла') { return resultsTable.ties += 1; } if (duelResult === 'Usver WIN') { return resultsTable.wins += 1; } if(duelResult === 'MACHINE WIN') { return resultsTable.losses += 1; } }; // Пытаюсь записать результат в памяти компьютера, чтоб при //обновлении страници не обнулялся resultTable localStorage.setItem('resultsTable', JSON.stringify(resultsTable)); В браузере все работает(кроме localStorage), но если пытаюсь скомпилировать это в vsCode выдает ошибку: ReferenceError: localStorage is not defined Грешу на то что код находится в подключаемом файле, и просто не видит объект Window.(но могу серьезно ошибаться) Пытался вбить в отдельный скрипт в HTML файле local.Storage тоже ничего не вышло. Подскажите куда копать. |
vscode не использую, но предполагаю что ты пытаешься запускать в нём код в режиме node.js(серверный js) - там нет никакого window(потому что нет окна) и никакого localStorage(потому что это браузерная фишка).
Скорее всего где-то там в настройках надо поменять режим запуска, но хз, возможно он так вообще не умеет и проверять тебе надо в обычном браузере. |
Режим запуска
Ну запускаю то я это все на локальном сервере, все срабатывает. Значение сохраненного в локальное хранилище объекта не меняется. Хотя объект resultsTable меняется
|
Думаю скорее всего дело в том, что подсчет идет в функции
|
Цитата:
Вот эта строка // Пытаюсь записать результат в памяти компьютера, чтоб при //обновлении страници не обнулялся resultTable localStorage.setItem('resultsTable', JSON.stringify(resultsTable)); Она просто отрабатывает сразу, а не после выполнения какого то действия. |
Т.е. если я его запишу в последнюю выполняемую функцию, все должно сработать? В принципе объект находится в локальной зоне видимости, и на сколько я понимаю, localstorage должен его увидеть
|
Часовой пояс GMT +3, время: 19:36. |