Dubrowsky
Хроники одного дупла
Блогово  →  WebDev  → 

О вреде расширения стандартных типов в JS

07 Мая 2014 года

Все вы, конечно, знаете, что JavaScript работает на прототипах, и что в JavaScript почти все - объект, и, соответственно, имеет прототип, и, соответственно, его можно расширять. 

Но не все знают, что делать это не нужно.

А вот пример из жизни, почему не нужно.

Есть, значит, код на JS, который написали одни очень умные парни. Примерно такой:

var arr = ['this','that'];
for (var i in arr) {
    if ($.trim(arr[i]).match(/this/)) {
        alert('This is this: '+arr[i]);
    }
}

Нормальный код, находит "this" в массиве и сообщает об этом алертом. Ну я хз зачем его написали, главное - работает как часы!

Пока в проект не добавили либу других очень умных парней, которые знают про прототипы и вовсю пользуются. Либа мегаполезная, хоть и состоит из двух строчек, одна из которых - комментарий:

// теперь можно писать myarr.first() для любого массива!!! ;)            
Array.prototype.first = function() {return this[0]};

Что же случится, если совместить эти два куска кода?

// теперь можно писать myarr.first() для любого массива!!! ;)            
Array.prototype.first = function() {return this[0]};

var arr = ['this','that'];
for (var i in arr) {
    if ($.trim(arr[i]).match(/this/)) {
        alert('This is this: '+arr[i]);
    }
}

Упс. Кажется, нашлось что-то лишнее =( 

Сегодня дядя Дубр дает ценные советы совершенно бесплатно.

Первым парням: юзайте старый добрый i=0; i < arr.length; i++ для массивов, чо десять раз по клаве нажать лень! Я уж не предлагаю hasOwnProperty()...

Вторым парням: юзайте старый добрый arr[0] или нафигачьте обертку или плагин для jQuery. Потому что первые парни меня хрен когда услышат.

Камменты

Дуброн самый07.05.2014, 09:03#
Есличо, после выполнения второго куска кода на этой странице ломается и первый, потому что прекрасный Array.prototype.first поселяется в вашем окне навеки и хрен его оттуда выпилишь теперь ПАНИКА ПАНИКА!!!11
Дуброн самый07.05.2014, 15:48#
И еще - поясню, почему я в заголовок поста вынес именно косяк вторых парней. Потому что их косяк - систематический, они это специально написали, чтобы многократно использовать, и случаи использования надо искать и фиксить по всему коду.

Написать коммент: памятка постеру

 

Крутые посты wtf??? →

27.06.2012 · 37 камментов · рейтинг 9.32
06.03.2008 · 29 камментов · рейтинг 6.71
29.08.2007 · 28 камментов · рейтинг 6.46
30.01.2013 · 13 камментов · рейтинг 5.73
19.01.2008 · 20 камментов · рейтинг 5.55

Последне камменты

04.10.2020  АлексПравославный обмен ссылками, домашнее порно: А у меня не только русское порно, но ещё и качеств...
08.09.2020  kostikovmuВывод месяца в родительном падеже (PHP, форматирование даты, strftime): Что бы работало в конце функции нужно добавить ret...
04.06.2020  seoonly.ruПробуем Яндекс.Аудитории: неплохо вышло!
26.03.2020  ДенисВывод месяца в родительном падеже (PHP, форматирование даты, strftime): Вставил этот код в файл .php, но ничего не отображ...
11.03.2020  Aleksey FilonovРеклама паблика вконтакте, промежуточный итог - CTR, охват, подписки: Привет, Я видел ваш сайт, и есть несколько услуг, ...

Статсы