А как вам такой синтакс?
Все знают, что пользоваться browser-detection — неправильно. Подозреваю, эти же все знают, что правильно пользоваться так называемым feature-detection. Если вы еще не входите в число этих «всех», сходите к Peter-Paul Koch’y, он подробно расписал, чем одно хуже другого.
Предположим, мы пишем класс ArrayUtilites, который удачно сочетает в себе разные вкусняшки для работы с массивами. И мы хотим, чтобы у нас был кроссбраузерный метод each. Мой вариант написания, сам алгоритм взят с MDC:forEach#compability:
1 if (typeof ArrayUtilites == "undefined" || !ArrayUtilites) {
2 var ArrayUtilites = {};
3 }
4
5 ArrayUtilites.each = (Array.prototype.forEach) ?
6 function (a, f, o) {
7 Array.prototype.forEach.call(a, f, o || A);
8 return ArrayUtilites;
9 } :
10 function (a, f, o) {
11 for (var i = 0, it; it = a[i]; i=i+1) {
12 f.call(o || A, it, i, a);
13 }
14 return ArrayUtilites;
15 };
Как уважаемые любители JavaScript воспринимают такой синтакс для feature-detection, когда проверка наличия функционала проводится лишь раз, при старте скрипта, а не во время выполнения, как обычно?