如何补充javascript对象

时间:2015-04-14 20:41:24

标签: javascript local-storage

我有一个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时...它只是一个或多个字符串,它不会重新创建对象并填充值,它只是一个长字符串......

1 个答案:

答案 0 :(得分:1)

localstorage无法知道原始对象是怎样的。您需要显式调用JSON.parse()。

userObject = JSON.parse(localStorage.getItem('userObject'));

<强>更新

请注意,JSON中永远不会序列化或支持函数。这是因为从生成的源代码中重建函数或原型是不可靠的,因为a)原型不是用JSON捕获的,而b)函数可以访问闭包。

为了获得有关再水化物体原型的方法,请继续:

&#13;
&#13;
// 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;
&#13;
&#13;