function foo(o, p) { possiblyDoBadThings(p); return o.f(); } noInline(foo); function Thingy() { } Thingy.prototype.f = function() { return 42; } function possiblyDoBadThings(p) { if (p) Thingy.prototype.f = function() { return 24; } } noInline(possiblyDoBadThings); for (var i = 0; i < 100000; ++i) { var result = foo(new Thingy(), false); if (result != 42) throw "Error: bad result: " + result; } var result = foo(new Thingy(), true); if (result != 24) throw "Error: bad result: " + result;