0

我在从 HTML5 本地存储中获取值时遇到问题。当我使用 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;

};

任何帮助将不胜感激。

干杯,萨杰什·南比亚尔

4

2 回答 2

2

目前没有用于存储函数的 JSON 实现。

这就是回调被删除的原因。

于 2012-09-18T05:36:01.150 回答
0

正如 Adam 正确解释的那样,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();

我不太确定您调用回调方法背后的意图是什么,在我看来,您的对象封装了要调用的内容和方式。

希望能帮助到你

于 2012-09-18T05:49:04.437 回答