字符串化数组时出现JSON.stringify问题

时间:2012-09-18 05:32:40

标签: javascript json html5

从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

2 个答案:

答案 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();

我不太确定调用回调方法的目的是什么,在我看来,你的对象封装了要调用的内容和方法。

希望有所帮助