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.
 
 
 
 
 
 

50 lines
1.2 KiB

/*===
{"quux":3,"foo":1}
0 quux
1 foo
2 baz
{"quux":3,"foo":1,"baz":4}
===*/
/* Should ancestor properties be enumerated when creating PropertyList?
* Specification is a bit unclear on this point. See E5.1 Section 15.12.3,
* main algorithm, step 4.b.ii.
*
* We currently iterate ancestor array indexed properties too.
*
* Creating an array instance with a chosen internal prototype is apparently
* not possible. However, Array.prototype is itself an array and we can add
* a value to it.
*/
function propertyListAncestorTest() {
var obj = { foo: 1, bar: 2, quux: 3, baz: 4 };
var k;
var plist;
// baseline
print(JSON.stringify(obj, [ 'quux', 'foo' ]));
// this is not very common
Array.prototype[2] = 'baz';
// plist will contain "0" and "1", and will inherit "2"
plist = [ 'quux', 'foo' ];
for (var k in plist) {
print(k, plist[k]);
}
// Now E5.1 Section 15.12.3, main algorithm, step 4.b.ii should presumably
// iterate indices "0" and "1" from the array and "2" from the ancestor.
// Note that 'length' plays no role in this.
//
// (Both Rhino and V8 fail this test.)
print(JSON.stringify(obj, plist));
}
try {
propertyListAncestorTest();
} catch (e) {
print(e.name);
}