JavaScript:序列化后保留方法

标签 javascript json serialization methods jstorage

我坚持使用一个更大的 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) - 在我的真实项目中- 我必须在整个代码中执行数百次。那么,是否有一个更简单的解决方案,如何在序列化后在对象上使用现有的函数?

最佳答案

据我所知,JSON 不具备序列化方法然后反序列化它们的能力。它主要用于 DTO(数据传输对象),而不是对象代理。

附带说明的是,如果 JSON 确实支持它,那么它可能会成为一个重大的安全漏洞。

关于JavaScript:序列化后保留方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27105418/

相关文章:

javascript - EaselJS:通过鼠标按下触发添加子项

javascript - html悬停不同的div

javascript - JS : how to shift each letter in the given string N places down in the alphabet?

javascript - jquery 数据表插件和动态对象名称

php - 使用 PHP MySQL 创建嵌套的 JSON

java - 反序列化问题

wcf - EF4 自跟踪实体和 WCF 序列化导致堆栈溢出

javascript - ionic select 不更新依赖于范围变量的函数

javascript - 从第二个页面返回的 JSON 对象在 IE 8 中不进行字符串化

c++ - 在不浪费空间的情况下将二叉搜索树存储在数组中的看似可行的算法