Re: [w3c/webcomponents] How to define APIs only for custom element authors (#758)

Some code examples and comments.

* Pass ```ElementInternals``` to ```super()```

```javascript
class MyElement extends HTMLElement {
    constructor() {
        const myInternals = new ElementInternals();
        // myInternals is inactive.  All operations on myInternals throw exceptions.
        super(myInternals);
        // myInternals is active.
    }
}
```
* ```createdCallback()```, invoked by ```super()```

Custom element users can steal ```ElementInternals``` instance by inheritance.

Code by a custom element author:
```javascript
class MyElement extends HTMLElement {
  createdCallback(internals) {
    this.internals_ = internals;
  }
}
```
Code by a custom element user:
```javascript
class MyElement2 extends MyElement {
  createdCallback(internals) {
    // This is called instead of MyElement's one.
    super.createdCallback(intrenals);
  }
}
```

* Opt-in + ```this.attachInternals()```

```javascript
class MyElement extends HTMLElement {
  // static getter is better than define()'s option?
  static get needsElementInternals() { return true; }

  constructor() {
    super();
    this.internals_ = this.attachInternals();
    // attachInternals() throws if needsElementInternals doesn't exist or returns false.
  }
}
```

-- 
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-433284667

Received on Friday, 26 October 2018 04:44:13 UTC