我在这里玩本地存储。并希望它获取或设置对象内的本地存储的值。我知道set或get项目是推荐的操作,但在某处我发现:
也可以使用localStorage.myvalue = "something";
为获取当前值,我们只需调用:localStorage.myvalue;
现在我把它放在一个像这样的对象中:
var myObj = {
myval: localStorage.myvalue
}
当我设置myObj.myval="somethingAgain"
;
然后这不起作用,通常可以通过这种方法轻松设置或获取对象,但在这种情况下为什么会这样呢?
通过调用myObj.myval
来检索值,但为什么我无法在此处设置值?
那么建议我在哪里错了?
答案 0 :(得分:4)
第一
localStorage.a = "value";
// create object
var ob = { a: localStorage.a };
console.log(ob.a); // "value"
当你做这样的事情时:
ob.a = "asfasf"
console.log(ob.a); // "asfasf"
console.log(localStorage.a); "value"
值不会改变,因为ob.a等于值, IT NOT A REFERENCE它的值, 你可以通过localStorage.a获得价值!
工作版
var ob = { a: function(value){ return localStorage.a = value; }};
ob.a("value"); // returns "value"
console.log(localStorage.a); // "value"
答案 1 :(得分:2)
这似乎可以通过以下小调整来实现。
<强>更新强>
对你来说太久了,速记更好?
var myObj = {
myval: function(val){
return (typeof (val) === 'undefined' ? localStorage.myvalue : localStorage.myvalue=val);
}
}
比调用它来设置
myObj.myval("Add this");
或获得
myObj.myval();
小提琴:http://jsfiddle.net/4WsNx/
希望这有帮助。
答案 2 :(得分:1)
您可以使用Object.prototype.__defineGetter__()
和Object.prototype.__defineSetter__()
。
但请记住,旧浏览器不支持这些内容!
答案 3 :(得分:1)
你的具体问题是你将一个原语定义为localStorage-object的属性而不是local和object作为localStorage的属性,所以你没有引用但只有一个值。
解决方案可以将整个localStorage定义为如下属性:
var obj = { store: localStorage };
obj.store.setItem('key','a value');
obj.store.getItem('key');