Получение и установка свойств вложенных объектов, связанных строкой - PullRequest
0 голосов
/ 28 ноября 2018

В моем проекте мне нужно получить доступ к свойствам объектов и свойств вложенных объектов и сохранить их в localStorage, а также иметь возможность извлекать их по отдельности и заменять текущие значения на сохраненные, но я не знаю, как автоматизировать это с(например) цикл for-in.

Сохраняющая часть работает хорошо, но, как вы можете видеть, я довольно застрял с загрузочной частью.Я думал о доступе к свойству с помощью окна ["propertyNameAsSring"], но я узнал, что вы можете получить доступ только к глобальным переменным, а не к их свойствам через объект окна.

Скажите, если вам нужны какие-либо пояснения!

var files = {
  paramsToSave: {
    "game_pageID": game.pageID,
    "game_page_sceneID": game.page.sceneID,
    "events": Events,
    "time_hours": time.hours,
    "time_minutes": time.minutes,
    "time_daysPlayed": time.daysPlayed,
  },
  save() {
    for (param in this.paramsToSave) {
      localStorage[`save_${param}`] = JSON.stringify(this.paramsToSave[param]);
    }
  },
  load() {
    // ?
    // window[this.paramsToSave[param]] = JSON.parse(localStorage[`save_${param}`]);
  }
};

var game = {

..

}

var time = {

..

}

var Events = {

..

}

1 Ответ

0 голосов
/ 28 ноября 2018

Если вы просто хотите загрузить параметры, вам все равно понадобится некоторая структура в вашем files объекте со списком paramsToSave.Это будет служить схемой свойств, которые могут быть сериализованы.Вам не нужно указывать для них начальные значения, но вам нужно указать их пути хранения.

После этого вам, вероятно, захочется обмениваться информацией между структурой paramsToSave и действительными глобальными объектами.

Если вы хотите это сделать, то, вероятно, вы просто хотите написать методы получения и установки для свойств paramsToSave.

var game = { pageID: 'abc123', page: { sceneID: 'sce234' } }; // example
var Events = { placeholder: 'This is the events object' }; // example
var time = { hours: 1, minutes: 2, daysPlayed: 3 }; // example
let mock_localStorage = {}; // mock

var files = {
   
  paramsToSave: {
    get game_pageID() { return game.pageID; },
    set game_pageID(value) { game.pageID = value; },
    
    get game_page_sceneID() { return game.page.sceneID; },
    set game_page_sceneID(value) { game.page.sceneID = value; },
    
    get events() { return Events; },
    set events(value) { Events = value; },
    
    get time_hours() { return time.hours; },
    set time_hours(value) { time.hours = value; },
    
    get time_minutes() { return time.minutes; },
    set time_minutes(value) { time.minutes = value; },
    
    get time_daysPlayed() { return time.daysPlayed; },
    set time_daysPlayed(value) { time.daysPlayed = value; }
  },
  save() {
    for (let param in this.paramsToSave) {
      mock_localStorage[`save_${param}`] = JSON.stringify(this.paramsToSave[param]);
    }
  },
  load() {
    for (let param in this.paramsToSave) {
      this.paramsToSave[param] = JSON.parse(mock_localStorage[`save_${param}`]);
    }
  }
};

files.save();
console.log(mock_localStorage);

// Simulate changing something in localStorage
mock_localStorage[`save_${'time_daysPlayed'}`] = '365';

files.load();
console.log(JSON.stringify(time, null, 2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...