Javascript JSON.stringify 无法正确处理原型?

2023-12-15

我一直在初始化我的可重用类,如下所示(构造函数通常是复制构造函数):

function Foo() {}
Foo.prototype.a = "1";
Foo.prototype.b = "2";
Foo.prototype.c = [];
var obj = new Foo();
obj.c.push("3");

但 JSON.stringify 不会产生预期的结果:

JSON.stringify(obj);

{}

这些变量对其他一切都按预期工作。
如果 toJSON 被覆盖,它可以正常工作:

Foo.prototype.toJSON = function () {
    return {
        a: this.a,
        b: this.b,
        c: this.c
    };
};
JSON.stringify(obj);

{"a":"1","b":"2","c":["3"]}

如果变量是在构造函数中定义的,它也可以正常工作:

function Alt() {
    this.a = 1;
    this.b = "2";
    this.c = [];
}
JSON.stringify(obj);

{"a":1,"b":"2","c":["3"]}

这是怎么回事?

这里的例子:http://jsfiddle.net/FdzB6/


对象原型(即其构造函数的原型)上的属性是readable通过对对象的引用:

function Constructor() { }
Constructor.prototype.a = "hello world";

var x = new Constructor();
alert(x.a); // "hello world"

然而,这些属性确实“卡在”原型对象上:

alert(x.hasOwnProperty("a")); // false

JSON 序列化器仅关注直接出现在正在处理的对象上的属性。这有点痛苦,但如果你考虑一下相反的过程,那就有点道理了:你当然不想要JSON.parse()将属性放回到原型上(无论如何这都是相当棘手的)。

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

Javascript JSON.stringify 无法正确处理原型? 的相关文章

  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png

随机推荐

  • Visual Studio 中 KeyDown 事件、KeyPress 事件和 KeyUp 事件之间的区别

    谁能告诉我两者之间的区别KeyDown事件 KeyPress事件和KeyUp事件 我查了msdn网站 没有太多解释 谁能用简单的逻辑意义告诉我每个事件发生的时间 我感觉上述所有事件都是在按下某个键时发生的 那么它们之间的具体区别是什么呢 M
  • 以不同颜色显示 R 热图异常值

    希望用不同的颜色标记 R 矩阵中的异常值 假设我的数据为 1 2 4 2 5 5 4 3 2 3 1 500 5 4 2 现在我想用不同的颜色标记 500 用热图的默认颜色标记矩阵的其余部分 有人可以指导我完成整个过程吗 这是实现这一目标的
  • 如何在 javascript 和/或 css 中向下滚动时水平移动 div

    有谁知道我怎样才能获得像本网站底部那样的轮播效果https brand twitch tv 我使用了在 codepen 中找到的这个示例来了解本节的结构 但是当尝试使用垂直滚动将其添加到我的网站时 它不是像 twitch 网站中那样的连续滚
  • TypeScript 接口实现不检查方法参数

    interface IConverter convert value number string class Converter implements IConverter convert string no error return co
  • Heroku Node.js 应用程序“进程已退出,状态为 1”和错误 h10

    我将我的应用程序部署到 Heroku 上 没有任何问题 我能够跑heroku local web在 localhost 5000 上并且它有效 当我访问 web dyno 地址时 它说应用程序错误 我检查了该网站的日志 上面写着 2017
  • 使用 CGPoint 追踪长按手势的确切位置

    通过使用 CGPoint 位置 它始终保存 uiscrollview 中的最后一个图像 当我点击其他图像进行保存时 我该怎么做才能保存我点击的确切图像 UIScrollView imageScrollView UIScrollView al
  • Cypress 运行命令而无需重新运行测试

    只是想知道 假设我有一个已完成运行的冗长的柏树测试 有没有办法尝试新的 cypress 命令 比如 cy get tg tag should have css background color rgb 0 128 0 非常感谢 如果您的意思
  • IOS7:Pop ViewController 强制 UIImageView 掉落

    将我的项目升级到iOS7后 当我执行 后退 按钮并且 UINavigationController 返回到上一页时 屏幕顶部的 ImageView 会向下移动 我使用 IB 进行布局 这些是我的模拟指标 我有自动布局 关于问题可能是什么的任
  • Zend Framework 2:获取有序的 SQL 调用

    我一直在尝试获取一个字段的 ASC DESC 调用顺序 假设是 craeted 但我似乎不知道如何在 ZF2 中执行此操作 我哪里出错了 namespace Todo Model class TodoTable extends Abstra
  • MySQL:将多个文件加载到表中

    我一直在尝试将多个文件加载到表中 以便它们适合同一行 我可以单独插入它们 但问题出在NULL值 并且我计划加入此表 如果发生这种情况 我会得到太多NULL价值观 无用的数据 LOAD DATA LOCAL INFILE malefirst
  • SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败

    我正在使用 python 2 7 10 request urllib2 Request url data urllib urlencode params f urllib2 urlopen request 导致以下异常 urlopen er
  • 计算文件夹内的文件夹数量

    你能帮我看看如何计算文件夹内的文件夹数量吗 弹出FolderBrowserDialog 后如何计算子文件夹并选择由3 个文件夹组成的主文件夹 我在用着 FolderBrowserDialog fbdialog new FolderBrows
  • 使用 JNI 将 java 与 C 定时器库接口

    我正在尝试使这个简单的示例发挥作用 import java io public class Timer public static void main String args setTimer new Runnable public voi
  • 在树莓派中安装QtVirtualkeyboard?

    我尝试在 Raspberry pi 中实现 Qt Virtualkeyboard 使用PyQt5 显示虚拟键盘但我没有找到它的前缀路径 bin plugin等文件夹 实际上整个Qt文件夹不存在 In 我之前的解决方案我使用了官方提供的 Qt
  • 使用 PHP 作为守护进程是否明智?

    我希望创建一个后台进程 有人告诉我这些进程通常是用 C 或类似的东西编写的 我最近发现 PHP 可以用来创建守护进程 如果我应该以这种方式使用 PHP 我希望得到一些建议 这是我对守护进程的要求 不断检查一行是否已被 添加到 MySQL 数
  • R - 传单限制 - 传单地图支持多少个标记?

    Data 我有一个包含 35 000 个纬度 经度位置的数据框 这些地点已绘制在交互式传单地图上 情况 我想通过 Markdown 文档在线发布地图 问题 当我将地图导出为 html 页面或以 markdown 格式时 地图为 Laggy
  • Apache FOP 可以用于将任意 HTML 转换为 PDF 吗?

    我尝试使用 Apache FOP 将 HTML 转换为 PDF HTML gt XHTML gt XSL FO gt PDF 我使用 Antenna House 中的 xhtml2fo xsl 进行 xhtml gt XSL FO 转换 它
  • 检测Delphi FMX ListBox何时滚动到底部?

    我需要检测用户何时向下滚动到 ListBox 的底部 以便我可以获取接下来的 25 个项目以在 listBox 中显示 有什么提示吗 好的 让我们分解一下 首先我们去滚动到项目在 FMX ListBox 单元中 procedure TCus
  • Win32:API 调用以列出服务器上的可用网络共享?

    假设我可以访问 IP 1 2 3 4 的 SMB 服务器 我如何确定可用共享的列表 当我输入 UNC 路径 1 2 3 4 时 Windows 资源管理器可以执行此操作 但命令提示符 dir 1 2 3 4 失败 我尝试了通常的 FindF
  • Javascript JSON.stringify 无法正确处理原型?

    我一直在初始化我的可重用类 如下所示 构造函数通常是复制构造函数 function Foo Foo prototype a 1 Foo prototype b 2 Foo prototype c var obj new Foo obj c