javascript - 序列化多态 JavaScript 对象

标签 javascript json polymorphism

从概念上讲,我的应用程序有一个接口(interface)和许多以不同方式实现该接口(interface)的对象。对象将通过各种工厂方法创建,随着我的应用程序的发展,将来会有更多工厂。

例如

var Shapes={};
var Shapes.createCircle=function(radius) {
  return {draw:function...}
};
var Shapes.createRectangle=function(width,height) {
  return {draw:function...}
};

我想在文件中序列化这些形状。我计划让每个对象存储其工厂的名称(例如“Shapes.createRectangle”)和一个参数数组(例如 [10,20]),然后将这些部分保存为 JSON 字符串。这样,反序列化的对象可以恢复其所有功能及其属性。

比如保存一个对象我打算存储JSON字符串

{"factory":"Shapes.createRectangle","args":[10,20]}

然后通过再次动态调用工厂方法在未来的 session 中重建对象。

这种序列化多态对象的方法有什么问题吗?

最佳答案

有可能。仅当这些对象是不可变的,或者如果您可以更改其状态的唯一方法是可逆回到工厂参数时,它才会起作用。

随着 api 的增长,这往往会变得棘手,但并非不可能。我会检查一个对象是否有 serializedeserialize 方法并调用它们,这样你就有了一个很好的模式如何在将来需要时自定义序列化行为。

关于javascript - 序列化多态 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39149640/

相关文章:

javascript - 如何防止 Jquery 函数通过 onclick 写入第二个输入来覆盖一个输入字段?

javascript - appenchild 完成后是否有事件监听器可供使用?

javascript - JSON 和 jQuery

Javascript 替换为正则表达式无法正常工作

javascript - 将 document.write 与 <object> 一起使用

ios - Swift 无法从 JSON api 读取普通话?

python Pycharm : Out of memory when loading large JSON files

c++ - 模板、多态性、抽象基类指针和运行时转换

java - 安全的多态性实践?

C++ 删除 base 或 dynamic_cast 指针?