You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
890 B

/*===
{"foo":1,"bar":2}
{"foo":1,"protoProp":1}
{"foo":{"myProp":"myVal"},"bar":{"myProp":"myVal"},"myProp":"myVal"}
===*/
function ancestorTest1() {
function F() {
}
F.prototype = { protoProp: 1 };
var obj = new F();
obj.foo = 1;
obj.bar = 2;
// only 'foo' and 'bar' are serialized, because JSON.stringify() only
// serializes 'own properties', not ancestors; E5.1 Section 15.12.3,
// JO(), step 6.a.
print(JSON.stringify(obj));
// However, when explicit property names are given, also ancestor
// properties can be serialized (Str() step 1 uses [[Get]])
print(JSON.stringify(obj, [ 'foo', 'protoProp' ]));
// Try the same through Object.prototype
Object.prototype.myProp = 'myVal';
print(JSON.stringify({ foo: {}, bar: {} }, ['foo', 'bar', 'myProp']));
}
try {
ancestorTest1();
} catch (e) {
print(e.name);
}