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.93
27.06.2012 · 37 камментов · рейтинг 11.83
28.04.2008 · 44 каммента · рейтинг 9.63
30.01.2013 · 13 камментов · рейтинг 7.44
29.08.2007 · 28 камментов · рейтинг 7.42

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

22.07.2017  СергейПочему не работает form.submit(): Также столкнулся с неработающим .submit() при отпр...
20.07.2017  СергейСвязь: Здравствуйте. Хочу предложить Вам тройной обмен п...
17.07.2017  Илья АрхипкинСколько журналистов в России?: Мне рассказывали как журналисты освещали акцию в К...
21.05.2017  Vadim GukОбработка кликов и цели в Яндекс.Метрике, улучшенный вариант: Большое спасибо за решение задачи.
20.05.2017  ДмитрийТестовое задание для PHP-программиста (Junior): А джуны ещё нужны у вас в компании?

Статсы