// Use the correct receiver when non-native objects are prototypes of other objects. function Thing(a, b) { this.a = a; this.b = b; } function foo() { var array = []; for (var i = 0; i < 10000; i++) array.push(new Thing(i, i + 1)); var proto = new Thing(1, 2); var obj = Object.create(proto); Object.defineProperty(Thing.prototype, "c", {set:function() { this.d = 0; }}); obj.c = 3; assertEq(obj.c, undefined); assertEq(obj.d, 0); assertEq(obj.hasOwnProperty("d"), true); assertEq(proto.d, undefined); assertEq(proto.hasOwnProperty("d"), false); obj.a = 3; assertEq(obj.a, 3); assertEq(proto.a, 1); assertEq(obj.hasOwnProperty("a"), true); } foo();