我一直在初始化我的可重用类,如下所示(构造函数通常是复制构造函数):
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/