А как вам такой синтакс?

Все знают, что пользоваться 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, когда проверка наличия функционала проводится лишь раз, при старте скрипта, а не во время выполнения, как обычно?

blog comments powered by Disqus