Re: Convenient way to create element and set its attributes at once

On Mon, Dec 2, 2013 at 11:00 AM, Domenic Denicola
<domenic@domenicdenicola.com> wrote:
> From: Tab Atkins Jr. <jackalmage@gmail.com>
>
>> 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

Received on Monday, 2 December 2013 19:09:34 UTC