- From: Daniel Ehrenberg <notifications@github.com>
- Date: Thu, 08 Nov 2018 09:51:16 +0000 (UTC)
- To: w3c/webcomponents <webcomponents@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/webcomponents/issues/758/436936171@github.com>
`needsInternals` sounds like a sound solution if it's passed as an option to `customElements.define`, but I guess it leaves two issues, that it's annoying to have to mention this in two places, and the difficulty of working with subclasses.
Here's a slightly different possibility, as an analogue of [this decorator-based solution](https://github.com/tc39/ecma262/issues/1341#issuecomment-435593024) ?
```js
// In the browser
customElements.getAttachInternals = function(klass) {
if (klass is already registered as a custom element) throw new TypeError;
return function(element) {
// Possibly generalize this check to make working with subclasses better
if (element's custom element definition's constructor !== klass) throw new TypeError;
return element.[[Internals]];
};
}
// Usage example
class MyElement extends HTMLElement {
#internals = attachInternals(this);
}
let attachInternals = customElements.getAttachInternals(MyElement);
customElements.define('my-el', MyElement);
```
By requiring that `getAttachInternals` be called before `customElements.define`, the system ensures that this call is collaborating with the code which defines the element (if custom element classes don't sit around un-defined for long). You could later make `getAttachInternals`be overloaded as a decorator, to save a little bit of code, but no need to block on that.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/webcomponents/issues/758#issuecomment-436936171
Received on Thursday, 8 November 2018 09:51:39 UTC