最近,我一直在 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" : "你看不到我!" }
更新(2019 年 1 月 10 日):
最后注意到@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)