let assert = (a) => { if (!a) throw "Bad!"; } let n = 200; let A = { c: 42 } let C = { __proto__: A } let B = { __proto__: C, f(i) { return super.c; } } var result = 0; for (var i = 0; i < n; ++i) { if (i == n / 2 ) { // This operation is going to force op_get_by_id_with_this to be regenerated Object.defineProperty(A, "c", {get: () => 12}); } result += B.f(i); } assert(result, 5400);