let assert = (a) => { if (!a) throw Error("Bad Assertion"); } let aObj = { get foo() { return this.a; } }; let obj = { jaz() { return super.foo; } }; obj.a = "foo"; Object.setPrototypeOf(obj, aObj); noInline(obj.jaz); for (let i = 0; i < 10000; i++) { if (i == 9999) { delete aObj.foo; assert(obj.jaz() === undefined); } else { assert(obj.jaz() == "foo"); } } let bObj = { get foo() { return this.a; } }; let obj2 = { foo() { return super.foo; } }; obj2.a = "foo"; Object.setPrototypeOf(obj2, bObj); noInline(obj.jaz); for (let i = 0; i < 10000; i++) { if (i == 9999) { Object.defineProperty(bObj, "foo", { get: () => {return "boo"; } }); assert(obj2.foo() == "boo"); } else { assert(obj2.foo() == "foo"); } }