Catch-all pattern in DOM APIs considered harmful (was: ECMA TC 39 / W3C HTML and WebApps WG coordination)
Maciej Stachowiak wrote:
Let me give a concrete example, the HTMLCollection interface from HTML5: dev.w3.org/html5/spec/Overview.html#htmlcollection-0.
This interface is defined to have "getter" properties which imply catchall getters for index and non-index properties. This is implemented by all existing browsers and is needed for compatibility with a lot of Web content. It is also required by DOM Level 2 HTML's ECMAScript bindings: www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html. The fact that ECMAScript 5 can't implement an interface that behaves like this is an ECMAScript issue, not an HTML issue, in my opinion, and one that will hopefully be fixed in future editions.
Note that if a future edition of ECMAScript were to support catch-alls, it would still not be a good idea to define any new APIs similar to HTMLCollection, that have the problem of names defined in HTML/XML/CSS potentially colliding with ECMAScript method names (or method names in other languages). Such APIs are confusing, error-prone, and detrimental to forward compatibility and language independence.
Anne van Kesteren wrote:
It does make sense to stop using it. Typical uses of this pattern result in a collision between two namespaces: a namespace of objects defined in HTML/XML (named by IDs for example), and the namespace of methods in a DOM object. This causes problems if an ID matches a method name, and requires programmers to use a different syntax if an ID name is not an ECMAScript identifier. It is much clearer to define an explicit 'get' method, similar to 'getElementById' for example.
The suggestion was only to stop using the catch-all pattern for new APIs, not to remove it.