Re: Convenient way to create element and set its attributes at once
"Tab Atkins Jr." <[email protected]>
| Newsgroups | gmane.comp.web.dom.general |
|---|---|
| Message-ID | <CAAWBYDCCnq9hLTwz_4P+1LNceUgEjnJ=fmJagx0TbLem7UNvXQ@mail.gmail.com> |
On Mon, Dec 2, 2013 at 11:00 AM, Domenic Denicola <[email protected]> wrote: > From: Tab Atkins Jr. <[email protected]> > >> Hm, I don't understand. instanceof just walks the prototype chains, and the functions denoted by "HTMLHeadingElement" and "HTML.h1" can have the same prototype. I suspect I'm missing something in your statement. > > Well, it depends on how HTML.h1 was implemented I guess... What were you thinking? > > Another way to put it is that you generally want the following invariants: > > new X() instanceof X > (new X()).constructor === X > Object.getPrototypeOf(new X()) === X.prototype > X.prototype.constructor === X > > I can't really see a solution that makes HTML.h1 a constructor that follows these identities without creating a new class hierarchy separate from HTMLHeadingElement. Right, you can't satisfy #2 and #4 if you have multiple constructors. You can satisfy #1 and #3 if you implement things in the obvious way: HTML.h1 = function(...args) { return new HTMLHeadingElement("h1", ...args); }; HTML.h1.prototype = HTMLHeadingElement.prototype; ~TJ