|
1 // obj.hasOwnProperty(id), Object.getOwnPropertyDescriptor(obj, id), and |
|
2 // Object.defineProperty(obj, id, desc) do not look at obj's prototype. |
|
3 |
|
4 var angryHandler = new Proxy({}, { |
|
5 has: () => true, |
|
6 get: (t, id) => { |
|
7 throw new Error("angryHandler should not be queried (" + id + ")"); |
|
8 } |
|
9 }); |
|
10 var angryProto = new Proxy({}, angryHandler); |
|
11 |
|
12 var obj = Object.create(angryProto, { |
|
13 // Define hasOwnProperty directly on obj since we are poisoning its |
|
14 // prototype chain. |
|
15 hasOwnProperty: { |
|
16 value: Object.prototype.hasOwnProperty |
|
17 } |
|
18 }); |
|
19 |
|
20 assertEq(Object.getOwnPropertyDescriptor(obj, "foo"), undefined); |
|
21 assertEq(obj.hasOwnProperty("foo"), false); |
|
22 Object.defineProperty(obj, "foo", {value: 5}); |
|
23 assertEq(obj.hasOwnProperty("foo"), true); |
|
24 assertEq(obj.foo, 5); |