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 · 90 камментов · рейтинг 18.62
27.06.2012 · 37 камментов · рейтинг 11.64
15.02.2013 · 24 каммента · рейтинг 9.98
28.04.2008 · 44 каммента · рейтинг 9.54
23.01.2013 · 20 камментов · рейтинг 9.05

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

18.11.2017  JohnКак закрыть окно Skype / свернуть нафиг в трэй: Спасибо, добрый человек! Неимоверно раздражало.
10.11.2017  NikПочему не работает form.submit(): Автор, спасибо за статью 5-летней давности. Подари...
27.10.2017  ДенисОбработка кликов и цели в Яндекс.Метрике, улучшенный вариант: Блин. А для не в зуб ногой - можно код целиком выл...
17.10.2017  ДубрDenwer - настройка алиасов (ServerAlias): Ахуенно не это, ахуенно то что кто-то пользуется Д...
29.09.2017  Maxтам же: Спасибо, чувак! Это ахуенно, оно заработало!!!

Статсы