document.forms[n][controlName] hätte meiner Ansicht nach in der originalen Form weiter bestehen müssen*; statt dessen wurde es dahingehend erweitert, dass document.forms[n] eine Referenz auf die DOM-Node ist und somit die Controls nicht mehr alleinig gekapselt sind. Dass dieser Mischmasch problematisch ist, muss bekannt gewesen sein.
Bereits in JavaScript 1.0 konnte man das Formular als solches über document.forms[n] ansprechen. Mit document.forms[i].action ließ sich etwa das action-Attribut auslesen und setzen.
Wenn ein Feld nun »action«, »submit« oder ähnlich benannt war, gab es das Problem der Überlagerung also prinzipiell schon in Javascript 1.0. Wie Netscape 2 das damals handhabte, weiß ich nicht – ich vermute, Felder überlagerten schon damals Formular-Attribute und -Methoden.
Das Problem wurde also nicht mit dem W3C-DOM eingeführt. Dass document.forms[i] den DOM-Knoten liefert, ist durchaus logisch, da document.forms[i] / document.forms.formName bereits das Setzen von Attributen, das Registrieren von Event-Handlern usw. erlaubte. Das HTML-DOM sah zumindest davon ab, formElement.feldName zu standardisieren, und pocht auf die elements-Collection oder Alternativen wie getElementsByName, getElementById.
Mathias