在我的项目中,我需要访问对象属性和嵌套对象属性并将它们保存到 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/