在我的项目中,我需要访问对象属性和嵌套对象属性并将它们保存到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 = {
..
}
答案 0 :(得分:1)
如果只想加载参数,则files
对象中仍然需要具有paramsToSave
列表的结构。这将作为可能被序列化的属性的 schema 。您不必为其提供初始值,但需要指定它们的存储路径。
此后,您可能需要在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));