如何将继承的对象字符串化为 JSON?

2023-11-23

使用 JSON.stringify() 时,json2.js 似乎忽略了父对象的成员。例子:

require('./json2.js');

function WorldObject(type) {    
    this.position = 4;
}

function Actor(val) {
    this.someVal = 50;
}

Actor.prototype = new WorldObject();

var a = new Actor(2);

console.log(a.position);
console.log(JSON.stringify(a));

输出是:

4
{"someVal":50}

我期望这个输出:

4
{"position":0, "someVal":50}

嗯,事情就是这样,JSON.stringify不保留对象的任何非拥有属性。您可以查看有关其他缺点和可能的解决方法的有趣讨论here.

另请注意,作者不仅记录了问题,还编写了一个名为水合物JS这可能对你有帮助。

这个问题比乍一看要更深一些。即使a真的会字符串化为{"position":0, "someVal":50},然后稍后解析它会创建一个具有所需属性的对象,但它既不是 Actor 的实例,也没有到 WorldObject 的原型链接(毕竟,解析方法没有此信息,所以它可以'不可能那样恢复它)。

为了保留原型链,需要巧妙的技巧(就像 HydrateJS 中使用的那样)。如果这不是您的目标,也许您只需要在字符串化对象之前“压平”对象即可。为此,您可以例如迭代对象的所有属性,无论它们是否是自己的,并重新分配它们(这将确保它们在对象本身上定义,而不是仅仅从原型继承)。

function flatten(obj) {
    var result = Object.create(obj);
    for(var key in result) {
        result[key] = result[key];
    }
    return result;
}

函数的编写方式不会改变原始对象。所以使用

console.log(JSON.stringify(flatten(a)));

你会得到你想要的输出a将保持不变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将继承的对象字符串化为 JSON? 的相关文章

随机推荐

  • 担心在 itune 配置门户中的团队帐户下的不同组之间共享分发证书的私钥

    我们是一所大型大学 在 Apple itunes 配置门户中拥有一个团队帐户 我们有多个不同的小组开发iOS应用程序 这些应用程序将在团队帐户 大学名称 下发布 看来苹果只允许创建一份分发证书 要发布应用程序 每个组都需要私钥来签署应用程序
  • 尽管我已经删除了该对象,为什么下面的代码没有崩溃?

    class object public void check std cout lt lt I am doing ok lt
  • 无法为 XNA 4.0 游戏选择目标框架

    我有一个 XNA 4 0 项目 希望使用 Net 4 0 完整配置文件进行编译 但默认情况下它设置为客户端配置文件 这目标框架应用程序选项卡中的组合框呈灰色 我已经卸载并重新安装了 Net 3 5 Net 4 0 和 Xna 4 0 可能是
  • 为什么新的 C 书籍不遵循 C99 标准?

    我见过的几乎所有 相对 关于 C 编程的新书似乎都不遵守 C99 标准 或者在额外的章节中对其进行了介绍 来自 Java 背景的 C99 标准使我的迁移 嗯 仍在迁移 变得更加容易 这可能也适用于其他语言 大多数 C 开发人员似乎还没有接触
  • 你可以像 String.fromCharCode 一样使用 String.fromCodePoint 吗

    我仍在学习 JavaScript 并练习从键盘获取输入 我刚刚了解到String fromCodePoint 对我来说 似乎捡起了所有String fromCharCode does Is String fromCodePoint被浏览器和
  • 如何拍照并保存在“ImageView”中?

    我需要采取picture与camera 保存picture 显示ImageView当我点击Imageview显示全屏 mode 将来需要发送picture to the internet 这就是我所做的 public void captur
  • 多重赋值语义

    在 Python 中可以这样做 a b 1 2 a b 1 2 a b 1 2 我使用检查生成的字节码dis并且它们是相同的 那么为什么要允许这样做呢 我是否需要其中之一而不是其他 需要在赋值左侧包含更多结构的一种情况是 当您要求 Pyth
  • 冻结 ASP.NET 网格视图列

    如何冻结 asp net 网格视图中最左边的初始 2 3 列 这样 在水平滚动时 将始终显示冻结的初始 2 3 列 有答案吗 是的 似乎可以使用一些 css 魔法 将固定列和可滚动列放在不同的 z 索引上 以将固定列保持在顶部 这伴随着一个
  • 在Shiny应用程序中删除DT数据表的行

    我有一个闪亮的应用程序 可以在 DT 表中显示数据帧数据 在应用程序中 我有一个按钮 单击该按钮将删除所选行 当我第一次选择行并单击删除按钮时 它会起作用 但再次单击后 错误的行将被删除 并且任何以前删除的行都会重新出现 我假设这是因为当我
  • 强制特定数据类型作为函数的参数

    我只是想知道是否有一种方法可以强制函数只接受某些数据类型 而不必在函数内检查它 或者 这是否不可能 因为 R 的类型检查是在运行时完成的 与 Java 等编程语言相反 类型检查是在编译期间完成的 例如 在 Java 中 您必须指定数据类型
  • 在 python (django) 中使用带参数的游标/查询中的“like”

    我知道这可能很愚蠢 但我决定无论如何都要问 我一直在尝试查询类似的内容 cursor execute select col1 col2 from my tablem where afield like s and secondfield s
  • MySQL和MongoDB之间的数据同步

    我正在寻找一种将数据从 MySQL 同步到 MongoDB 的方法 我不想只是复制我的数据 我希望它们永久同步 有谁知道钨复制器是否可以完成这项工作 我可以看到它复制数据 但是当 MySQL 数据库中发生更改时自动复制数据怎么样 如果不可能
  • 在 Objective-C 中如何测试字符串是否为空?

    我如何测试是否NSStringObjective C 中是空的吗 您可以检查是否 string length 0 这将检查它是否是一个有效但空的字符串 以及它是否为零 因为调用lengthon nil 也会返回 0
  • Office Open XML 中的 之间有什么区别?

    这两个 Office Open XML 片段有什么区别
  • android Camera2 API + TextureView 覆盖用于在相机预览上绘图

    因此 我需要覆盖camera2预览并通过在顶部分层透明覆盖层在预览视频图像上绘制一个矩形 我从这里开始使用基本的 Camera2 代码 https github com googlesamples android Camera2Basic
  • 如何在 DT::datatable 中使用服务器端处理?

    我正在使用 DT datatable 来可视化 R markdown 文件中的表 R markdown file library DT r viewdata this is an example but my actual dataset
  • 如何将 hashMap 与 JTable 一起使用

    我有一个 hashMap 我希望在 JTable 中查看它的数据 但我在获取 hashMap 的列和行数量以及要显示的数据时遇到了麻烦 我有一个 hashmap 它以 accountID 作为键和一个学生的对象 其中每个学生都有自己的数据
  • SwiftUI 在圆角矩形内屏蔽一个矩形

    你好呀 我想知道 在 SwiftUI 中 如何屏蔽圆角矩形的内容 以便子矩形剪掉角 在我的示例中 我在 zstack 上有一个白色圆角矩形和一个粉色矩形 我尝试应用剪切 但粉色矩形不符合边角 我尝试将 mask 应用于白色矩形 但它给出了与
  • 无法在 pthread_create 函数中将 '*void(MyClass::*)(void*) 转换为 void*(*)(void*)

    我正在尝试使用 CameraManager 类创建一个新线程 但出现以下错误 无法在 pthread create 函数中将 void CameraManager void 转换为 void void 我在cameramanager h文件
  • 如何将继承的对象字符串化为 JSON?

    使用 JSON stringify 时 json2 js 似乎忽略了父对象的成员 例子 require json2 js function WorldObject type this position 4 function Actor va