// obj.hasOwnProperty(id), Object.getOwnPropertyDescriptor(obj, id), and // Object.defineProperty(obj, id, desc) do not look at obj's prototype. var angryHandler = new Proxy({}, { has: () => true, get: (t, id) => { throw new Error("angryHandler should not be queried (" + id + ")"); } }); var angryProto = new Proxy({}, angryHandler); var obj = Object.create(angryProto, { // Define hasOwnProperty directly on obj since we are poisoning its // prototype chain. hasOwnProperty: { value: Object.prototype.hasOwnProperty } }); assertEq(Object.getOwnPropertyDescriptor(obj, "foo"), undefined); assertEq(obj.hasOwnProperty("foo"), false); Object.defineProperty(obj, "foo", {value: 5}); assertEq(obj.hasOwnProperty("foo"), true); assertEq(obj.foo, 5);