Re: [w3c/webcomponents] customElements.define should throw on registration of definitions that shadow built-in properties / methods. (#583)

@trusktr

If we let authors override `setAttribute`, for example, in a custom element definition but the parser doesn't call their element's `setAttribute` while constructing trees, then we can't ever define tree construction that way because authors will already have written code assuming that the parser doesn't do this. I don't want authors to be able to rely on that assumption and prevent that redefinition.

---

It's important to note that this behavior currently is observable *without* being able to define custom elements but it's fairly unusual. For example:

```html
<div>
  <script>
    const parentNode = document.currentScript.parentNode;
    const overriddenMethod = parentNode.insertBefore;
    parentNode.insertBefore = function(...args) {
      console.log("This will never be logged.");
      return overriddenMethod.call(this, ...args);
    };
  </script>
  <div>The `insertBefore` above is never called with this child.</div>
</div>
```

or

```javascript
const elt = document.createElement('div');
const overriddenMethod = elt.setAttribute;
elt.setAttribute = function(...args) {
  console.log("This will never be logged.");
  return overriddenMethod.call(this, ...args);
};
elt.id = "abc"; // The `setAttribute` above isn't called when `id` is set.
```

However, I suspect that authors don't do this kind of thing particularly often and this behavior might be breakable without much consequence. Maybe this assumption isn't correct?

-- 
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/583#issuecomment-307248269

Received on Thursday, 8 June 2017 22:49:55 UTC