从HTML5 localstorage中获取值时遇到问题。当我使用JSON.stringify为键设置值时,回调将被删除。 我遇到了这个问题。 以下是代码段。
var topics = {};
var subscribe = function (topic, fn)
{
if (!topics[topic])
{
topics[topic] = [];}
topics[topic].push({ callback: fn,context: this });
window.localStorage.setItem('myArray', JSON.stringify(topics[topic]));
return this;
};
var publish = function (topic) {
var args;args = Array.prototype.slice.call(arguments, 1);
var myArray = JSON.parse(window.localStorage.getItem('myArray'));
for (var i = 0, l = myArray.length; i < l; i++) {var subscription = myArray[i];
subscription.callback.apply(subscription.context, args);
}
return this;
};
任何帮助都将受到高度赞赏。
干杯, Sajesh Nambiar
答案 0 :(得分:2)
目前没有用于存储函数的JSON实现。
这就是删除回调的原因。
答案 1 :(得分:0)
正如亚当正确解释的那样,JSON用于表示纯数据而不是代码逻辑。这是一个关注点分离的问题。
“正确”的方式可能是从本地存储中检索数据,将其包装在您的自定义JavaScript对象中,然后该对象已经附加了用于操作数据的功能。我正在考虑像
这样的事情var MyDataObj = function(){
//constructor
//load the data from the local storage and associate it to this object like
this.data = JSON.parse(window.localStorage.getItem('myArray'));
};
MyDataObj.prototype.executeAction = function(){
//peform your operations like invoking the subscriptions
};
然后使用
var dataObj = new MyDataObj();
dataObj.executeAction();
我不太确定调用回调方法的目的是什么,在我看来,你的对象封装了要调用的内容和方法。
希望有所帮助