そしてcreateElementするDocumentがHTMLDocumentでなくても、XHTML名前空間をもつ要素は全てHTMLElementのインスタンスとして生成される、みたい。window.documentとは縁もゆかりもないDOMParser由来のDocumentを生成して、展開名"http://www.w3.org/1999/xhtml" + "a" の要素をcreateElementNSしてみたところ、HTMLAnchorElementのインスタンスだった。もちろんFirefox前提で、仕様にはこの辺りの挙動について何も書かれていない。と思う。
var doc = (new DOMParser).parseFromString("<doc/>", "application/xml");
var elmA = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
alert(elmA instanceof HTMLAnchorElement); // true
XHTMLの名前空間を持っているということが、HTMLElementとして認識される鍵となっているようだけれども、それってどうなんだろう。DOM HTMLには「レガシー」なアトリビュートが沢山あるし、application/xhtml+xmlな文書でDOM HTMLを使っちゃいかんというか、少なくとも動作の保障はされない筈。昨日も書いたけれども、DOM HTMLはレガシーHTMLの為のインターフェイスなんだし。
気にしない気にしない。
因みにElement、HTMLElement、HTMLAnchorElementという階層。HTMLElementはhtml要素を抽象化するものではないのがややこしいので一応。