1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// 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);
|