Я вважаю, що це філософське рішення W3C. Конструкція W3C DOM [специфікація] цілком ортогональні до конструкції JavaScript, як РОМ означає бути платформи і мови нейтральна.
Такі рішення, як " getElementsByFoo()
повертає впорядкований NodeList
" або " querySelectorAll()
повертає StaticNodeList
", є дуже навмисними, так що реалізаціям не потрібно турбуватися про вирівнювання повернутої структури даних на основі залежних від мови реалізацій (наприклад, .map
вони доступні для масивів у JavaScript та Ruby, але не в Списках на C #).
W3C мета низький: вони говорять, що NodeList
повинно містити тільки для читання .length
властивості типу непідписаного довгої , тому що вони вважають , що кожна реалізація може принаймні підтримка , що , але вони не будуть говорити явно , що []
оператор індексу повинен бути перевантажені для підтримки отримання позиційних елементів, тому що вони не хочуть стиміювати якийсь поганий маленький мову, який йде разом із цим, який хоче реалізувати, getElementsByFoo()
але не може підтримувати перевантаження оператора. Це поширена філософія, яка присутня на більшій частині специфікації.
Джон Резіг озвучив подібний варіант, як ваш, до якого додає :
Мій аргумент не так вже й багато, що
NodeIterator
не дуже DOM - це те, що він не дуже JavaScript. Він не користується функціями, наявними в мові JavaScript, і використовує їх якомога краще ...
Я дещо співпереживаю. Якби DOM був написаний спеціально з функціями JavaScript на увазі, це було б набагато менш незручно і більш інтуїтивно. У той же час я розумію дизайнерські рішення W3C.