javascript - 获取和设置与字符串链接的嵌套对象属性

标签 javascript loops object for-loop

在我的项目中,我需要访问对象属性和嵌套对象属性并将它们保存到 localStorage,并且能够单独检索它们并将当前值替换为存储的值,但我不知道如何使用(例如)for-in 循环。

保存部分运行良好,但如您所见,我对加载部分感到很吃力。 我考虑过使用 window["propertyNameAsSring"] 访问该属性,但我了解到您只能通过 window 对象访问全局变量,而不能访问它们的属性。

如果您需要任何说明,请告诉我!

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 = {

..

}

最佳答案

如果您只想加载参数,您仍然需要在您的 files 对象中有一些结构,其中包含一个 paramsToSave 列表。这将用作可以序列化的属性的架构。您不必为它们提供初始值,但您需要指定它们的存储路径。

在此之后,您可能希望在 paramsToSave 结构和实际全局对象之间交换信息。

如果您想这样做,那么您可能只想为 paramsToSave 的属性编写 getter 和 setter。

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));

关于javascript - 获取和设置与字符串链接的嵌套对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53525364/

相关文章:

python - Python 中的 while 循环问题

javascript - 使用 lodash 比较并从数组中删除对象

javascript - 如何根据数组长度将索引添加到值为 0 或 1 的嵌套数组

javascript - 如何设置文本区域中文本的格式或样式?

arrays - 提高 MATLAB 代码速度

javascript - 当鼠标光标位于使用 highcharts 的图表上时如何渲染垂直线?

java - 当我使用 "<+"检查条件时,为什么 for 循环不显示编译错误?

javascript - 在 html 中显示嵌套的 json 对象

javascript - 为动态创建的 DOM 对象多次触发事件

javascript - 如何制作变色背景?