我被一个更大的 JavaScript 应用程序(使用 jQuery Mobile)困住了,其中大部分程序逻辑已经实现。现在我想向它添加序列化(使用一个名为 JStorage 的插件)。在此代码示例中,我将一个对象字符串化为 JSON,然后再次将其转换为一个对象(全部没有 JStorage),但是我添加到原始对象的方法会丢失,如下代码所示:
function TestObject() {
this.lang = "English";
}
// This is the method I want to keep
TestObject.prototype.showLang = function() {
console.log(this.lang)
};
var test1 = new TestObject();
var test2 = $.parseJSON(JSON.stringify(test1)); // After save and reload
test1.showLang(); // This works
test2.showLang(); // This causes an error
问题还有另一个限制:在代码中,我经常使用点运算符来调用函数,如test1.showLang()。我知道我可以添加一个像这样的“全局”函数,它适用于原件和副本:
function showLang(obj) {
console.log(obj.lang);
}
但是随后我必须将对函数的每个现有调用从test1.showLang()更改为showLang(test1) - 在我的实际项目中 - 我必须在整个代码中执行数百次。那么有没有更简单的解决方案如何在序列化后在对象上使用现有函数?