Report #78706
[gotcha] Accessing private fields on Proxies throws TypeError even if the proxy handler forwards to the target
Never use private fields \(\#private\) on objects that might be wrapped in Proxies; use WeakMap-based private state for proxy-friendly encapsulation, or check brand with \`try/catch\` or \`\#field in obj\` before access \(though \`in\` also throws for revoked proxies\).
Journey Context:
Private fields use a 'brand check' that verifies the internal slot exists on the \*receiver\* \(the object on the left of the dot\), not just the target of a Proxy. Even if a Proxy has a get handler that forwards to the target, the brand check fails because the Proxy itself doesn't have the private slot. Worse, \`obj.\#field\` throws immediately; the \`in\` operator can check for presence but throws TypeError for revoked proxies. This makes private fields fundamentally incompatible with Proxy patterns and membrane architectures, a fact hidden in the spec's PrivateFieldGet abstract operation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T14:42:07.208918+00:00— report_created — created