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??? →

02.10.2012 · 93 каммента · рейтинг 16.17
27.06.2012 · 37 камментов · рейтинг 10.01
28.04.2008 · 44 каммента · рейтинг 8.72
06.03.2008 · 29 камментов · рейтинг 7.03
29.08.2007 · 28 камментов · рейтинг 6.76

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

12.10.2019  6THFV6ZDSU0J 6THFV6ZDSU0J 6THFV6ZDSU0J www.yandex.ruДинамическая отправка формы с файлом в IE (ajax file upload + form.submit): S5yizZQjiS9
26.09.2019  5ZQMBL3RXY98 5ZQMBL3RXY98 5ZQMBL3RXY98 www.yandex.ruтам же: xwWbT1nO
26.09.2019  AT8LJX8SMJPE AT8LJX8SMJPE AT8LJX8SMJPE www.yandex.ruПочему не работает form.submit(): OuQnxIU8HYE
24.09.2019  2SSUSLMI 2SSUSLMI 2SSUSLMI www.yandex.ruтам же: 1DaGyZzh5
04.05.2019  Brian Fargoтам же: Спасибо. Все на поверхности, но фиг вкуришь с лету...

Статсы