1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:27:35 +00:00

LibJS: Support receiver in ProxyObject::get/put()

If a receiver is given, e.g. via Reflect.get/set(), forward it to the
target object's get()/put() or use it as last argument of the trap
function. The default value is the Proxy object itself.
This commit is contained in:
Linus Groh 2020-11-24 17:47:51 +00:00 committed by Andreas Kling
parent 76308c2e1f
commit f6f0d3cbae
3 changed files with 35 additions and 6 deletions

View file

@ -43,6 +43,21 @@ describe("[[Set]] trap normal behavior", () => {
p[Symbol.hasInstance] = "foo"
expect(p[Symbol.hasInstance]).toBe("foo");
});
test("custom receiver value", () => {
const o = {};
const r = {};
let p = new Proxy(o, {
set(target, property, value, receiver) {
receiver[property] = value;
return true;
},
});
expect(Reflect.set(p, "foo", 42, r)).toBe(true);
expect(o.foo).toBeUndefined();
expect(r.foo).toBe(42);
});
});
describe("[[Set]] invariants", () => {