我有一个javascript对象(userObject),我填充在一个页面上,然后我使用JSON.stringify
将对象添加到localstorage现在在下一页上,我想用第一页上localStorage的值重新合成userObject。
userObject全局变量在共享/公共javascript中声明一次。
但是使用当前逻辑,登录页面在userObject中存储用户名和用户ID,然后window.location.href执行页面重定向。这是清除userObject中的数据的地方(假设旧对象被冲走,而不是新页面上的新对象)。
问题是,如何使用localStorage中的值对主页上的新userObject进行补充。
以下是我如何加载locastorage
localStorage.setItem('userObject', JSON.stringify(userObject));
这就是我在考虑重新合成userObject
userObject = localStorage.getItem('userObject');
但是在查看userObject时...它只是一个或多个字符串,它不会重新创建对象并填充值,它只是一个长字符串......
答案 0 :(得分:1)
localstorage无法知道原始对象是怎样的。您需要显式调用JSON.parse()。
userObject = JSON.parse(localStorage.getItem('userObject'));
<强>更新强>:
请注意,JSON中永远不会序列化或支持函数。这是因为从生成的源代码中重建函数或原型是不可靠的,因为a)原型不是用JSON捕获的,而b)函数可以访问闭包。
为了获得有关再水化物体原型的方法,请继续:
// User constructor function
function User() {
}
User.prototype.isValid = function () {
return true;
};
User.prototype.isAdmin = function () {
return this.name === "admin";
};
// create and serialize an object
var userA = new User();
userA.name = "admin";
var copy = JSON.parse(JSON.stringify(userA));
// rehydrate with functions on prototype
var userB = new User();
for (var prop in copy) {
if (Object.prototype.hasOwnProperty.call(copy, prop)) {
userB[prop] = copy[prop];
}
}
console.log(userB.isAdmin());
&#13;