- From: Joe Pea <notifications@github.com>
- Date: Thu, 26 Dec 2024 15:59:45 -0800
- To: WICG/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <WICG/webcomponents/issues/962/2563178839@github.com>
This thread proposes a "private class field symbols" syntax idea, which would allow "protected" to be possible, and it also explains how this would be useful for features like `ElementInternals` which `proctected` would be super useful for: https://es.discourse.group/t/private-class-field-symbols/2262 To summarize, it would allow people to define elements as follows, making being "open to extension" easier: ```js const internals = Symbol() export class BaseElement extends HTMLElement { #[internals] constructor() { super() this#[internals] = this.attachInternals() } } ``` If the subclass was not already getting the internals, that is still problematic because the subclass will still be calling `attachInternals` and the base class, if it begins to call `attachInternals`, will start to cause a runtime error. With this `BaseElement` example, now a subclass can openly extend by accessing the internals: ```js import {internals, BaseElement} from 'some-lib' class SomeElement extends BaseElement { method() { this#[internals] // use the internals } } customElements.define('some-el', MyEl) // "finalize" the class (subclasses of SomeElement will need a new name). ``` Public users will not be able to use the internals: ```js import {internals} from './some-lib' const el = document.querySelector('some-el') el.method() // ok el#[internals] // SyntaxError (good!) ``` The best solution would be, if `attachInternals` could be updated so that it can be called any number of times (not only once) when inside an custom element `constructor` call stack. Then subclasses could simply call it, even if a base class doesn't use it yet. Problems solved. -- Reply to this email directly or view it on GitHub: https://github.com/WICG/webcomponents/issues/962#issuecomment-2563178839 You are receiving this because you are subscribed to this thread. Message ID: <WICG/webcomponents/issues/962/2563178839@github.com>
Received on Thursday, 26 December 2024 23:59:49 UTC