The issues with private state (either WeakMaps or private symbols) and
Proxies seems to largely boil down to the lack of the ability to bind
|this| in forwarding method invocations to the target. This is the same
limitation that prevents Proxies from being able to fully replace
__noSuchMethod__. In either case, the internal state of the object is
|this| sensitive and methods called on the Proxy can either malfunction or,
in the case of WeakMap stored state, are completely unable to work.

A solution to this would be to add an [[Invoke]] internal method and a
corresponding "invoke" Proxy trap. awb has referred to this as
[[CallProperty]](property), but I think it might actually be better to use
[[Invoke]](method) so that super calls can be trapped. The difference
between the two is visible to a Proxy: [[Invoke]] would be "get" (usually)
and then "invoke", [[CallProperty]] would be "callProperty" and then
potentially a "get" (when forwarded). [[Invoke]] would also allow .call and
.apply to be trapped as "invoke" instead of not trapped at all.

Outside of Proxies, this change wouldn't be observable.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to