【发布时间】:2012-09-04 08:57:57
【问题描述】:
我最近在 Node.js 和浏览器中处理了大量 JSON 解析和传递 Javascript,但遇到了这个难题。
我使用构造函数创建的任何对象都无法通过 JSON.stringify 完全序列化,除非我单独初始化了构造函数中的所有值!这意味着我的原型在设计这些类时变得毫无用处。
有人可以解释为什么以下内容没有按我预期的那样序列化吗?
var ClassA = function () { this.initialisedValue = "You can see me!" };
ClassA.prototype = { initialisedValue : "You can't see me!", uninitialisedValue : "You can't see me!" };
var a = new ClassA();
var a_string = JSON.stringify(a);
会发生什么:
a_string == { "initialisedValue" : "你可以看到我!" }
我希望:
a_string == { "initialisedValue" : "你可以看到我!", "uninitialisedValue" : "你看不到我!" }
更新(01-10-2019):
终于注意到@ncardeli 的答案,它确实允许我们执行以下操作来实现我的上述要求(在 2019 年!):
替换
var a_string = JSON.stringify(a);
与
var a_string = JSON.stringify(a, Object.keys(ClassA.prototype));
完整代码:
var ClassA = function () { this.initialisedValue = "You can see me!" };
ClassA.prototype = { initialisedValue : "You can't see me!", uninitialisedValue : "You can't see me!" };
var a = new ClassA();
var a_string = JSON.stringify(a, Object.keys(ClassA.prototype));
console.log(a_string)
【问题讨论】:
-
我知道方法不能通过 JSON 进行序列化,但感谢 lonesomeday,因为您指出我对此进行了讨论。显然这是一个记录在案的“问题”,不知道为什么我的搜索没有提出这个问题。谢谢!
-
@lonesomeday,我个人更喜欢参考标准,说“不,继承的属性不算数”,而不是回答“就是这样”。哦,在我输入此评论后,这就是答案。 :)
标签: javascript json node.js prototype