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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.