function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } function makePolyProtoObject() { function foo() { class C { constructor() { this._field = 42; } }; return new C; } for (let i = 0; i < 15; ++i) foo(); return foo(); } function target(object) { return object.__proto__; } noInline(target); var polyProtoObject = makePolyProtoObject(); var prototype = Reflect.getPrototypeOf(polyProtoObject); for (var i = 0; i < 1e5; ++i) shouldBe(target(polyProtoObject), prototype); polyProtoObject.__proto__ = null; shouldBe(target(polyProtoObject), undefined);