function A() {};
A.prototype = [];

function B() {};
B.prototype = new A();

function C() {};
C.prototype = new B();

function D() {};
D.prototype = new C();

function E() {};
E.prototype = new D();

function f() {
    var o = new B();
    for (var i=0; i<10; i++)
	o[i] = i;

    var expected = '{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}';
    assertEq(JSON.stringify(o), expected);

    var o = new A();
    for (var i=0; i<10; i++)
	o[i] = i;

    assertEq(JSON.stringify(o), expected);

    var o = new D();
    for (var i=0; i<10; i++)
	o[i] = i;

    assertEq(JSON.stringify(o), expected);

    var o = new E();
    for (var i=0; i<10; i++)
	o[i] = i;

    assertEq(JSON.stringify(o), expected);
}
f();