var o2 = new Proxy({}, {}); function f1() {} function f2() {} function f4(o) { var key = Object.getOwnPropertyNames(o)[18]; o4 = o[key]; o.prototype = {}; } f4(f1); f4(f1); f4(f2); new f2(o2); // these will hold only if type inference is enabled. //assertEq(shapeOf(f1) == shapeOf(f2), false); //assertEq(shapeOf(f1) == shapeOf(f4), false); function factory() { function foo() {} foo.x = 0; return foo; } var fobjs = []; for (var i = 0; i < 10; i++) { var of = fobjs[i] = factory(); if (i > 0) { assertEq(fobjs[i - 1] === of, false); assertEq(shapeOf(fobjs[i - 1]), shapeOf(of)); } } assertEq(shapeOf(fobjs[0]) == shapeOf(f1), false);