2015-06-11 136 views
1

我有自定义方法的JS对象作为原型(例如Foo.prototype.myAwesomeMethod)。如果我在localStorage中加载我的对象并在稍后得到它,我将放弃这些方法。我可以将对象原型保存在本地存储中吗?

var foo = new Foo() 
console.log(foo.myAwesomeMethod()) // WIN 

localStorage.setItem('foo', foo) 

foo = localStorage.getItem('foo') 
console.log(foo.myAwesomeMethod()) // FAIL... 

是否有可能保存在localStorage对象的原型?如果不是,如何正确地重新实例化类?

+0

现在大多数浏览器都会将简单的对象存储在本地存储中,但是您仍然应该将其视为一个字符串存储器,如果您愿意的话可以替代cookie,并且存储原型可能不是最好的想法。 – adeneo

+0

为什么你甚至需要这个?本地存储用于数据,而不是逻辑。 – Pavlo

回答

3

本地存储通常是用于数据存储的键值对。

本地存储的一个缺点是只能在不同的键中存储字符串。这意味着当你有一个对象时,它不会以正确的方式存储。

不推荐将原型存储在本地存储中。

+0

我想我明白了,谢谢! – Alex

1

你可以试试这个

function Foo() { 
    this.bar = 1; 
} 
Foo.prototype.myAwesomeMethod = function() { 
    return "And the winner is " + this.bar; 
} 
var foo; 

window.onload = function() { 
    foo = new Foo(); 
    foo.bar = 3; 
    console.log(foo.myAwesomeMethod()); // "And the winner is 3" 
    var test = JSON.stringify(foo); //localStorage.setItem('foo', foo); 
    foo = JSON.parse(test); // = localStorage.getItem('foo'); 
    foo.__proto__ = new Foo(); // <-------------- 
    console.log(foo.myAwesomeMethod()); // "And the winner is 3" 
}); 

编辑: 我以前的代码是未经测试,没有工作,这是工作代码

+0

我同意,但如果它做了'foo.bar = 1',我的新Foo()将会清除它。 – Alex

+0

nope,你替换原型,而不是对象属性 –

相关问题