- From: Joe Pea via GitHub <sysbot+gh@w3.org>
- Date: Wed, 05 Aug 2020 05:47:27 +0000
- To: public-houdini-archive@w3.org
@Danny-Engelman The custom elements API simply reads the property off of the class (constructor). It doesn't matter if it is a getter or not.
In the past, there was a time when `static observedAttributes = ['style']` was not yet legal JavaScript syntax, and the only options were to use a getter in the class definition (like your second example), or to define it after the class definition like so:
```js
class MyEl extends HTMLElement { /* ... */ }
// This is also another way to define a "static" property on a class.
MyEl.observedAttribute = ['style']
customElements.define('my-el', MyEl)
```
All three methods works. The browser only needs to read the property, but it doesn't matter how it gets there in the first place.
Even this works:
```js
class MyEl extends HTMLElement { /* ... */ }
// This is even another way to define a "static" property on a class.
Object.defineProperty(MyEl, 'observedAttribute', {
value: ['style'],
writable: true,
enumerable: true,
configurable: true,
})
customElements.define('my-el', MyEl)
```
Eventually static class properties landed (for non-methods). So then it became simpler:
```js
class MyEl extends HTMLElement {
static observedAttribute = ['style']
}
console.log(MyEl.observedAttributes) // ['style']
customElements.define('my-el', MyEl)
```
--
GitHub Notification of comment by trusktr
Please view or discuss this issue at https://github.com/w3c/css-houdini-drafts/issues/996#issuecomment-668993594 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Wednesday, 5 August 2020 05:47:30 UTC