I've been initializing my reusable classes like this (constructor is usually a copy-constructor):
function Foo() {}
Foo.prototype.a = "1";
Foo.prototype.b = "2";
Foo.prototype.c = [];
var obj = new Foo();
obj.c.push("3");
but the JSON.stringify does not produce the expected result:
JSON.stringify(obj);
{}
The variables work as expected for everything else.
If toJSON is overridden, it works fine:
Foo.prototype.toJSON = function () {
return {
a: this.a,
b: this.b,
c: this.c
};
};
JSON.stringify(obj);
{"a":"1","b":"2","c":["3"]}
It also works fine if the variables are defined inside the constructor:
function Alt() {
this.a = 1;
this.b = "2";
this.c = [];
}
JSON.stringify(obj);
{"a":1,"b":"2","c":["3"]}
What's going on?
Example here: http://jsfiddle.net/FdzB6/
new Foo- they'll be readable from the prototype via an instance, of course, but ahasOwnProperty("a")test will returnfalse.