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 · 92 каммента · рейтинг 17.59
28.04.2008 · 44 каммента · рейтинг 9.19
23.01.2013 · 20 камментов · рейтинг 8.43
29.08.2007 · 28 камментов · рейтинг 7.11
28.03.2008 · 24 каммента · рейтинг 6.76

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

31.07.2018  ДубрНаконец-то, нормальная работа с LESS в NetBeans: Sergio, вообще NetBeans кажется предлагал компилит...
18.07.2018  яндекс диск моя страницаНовый Яндекс.Браузер - браузер "Yandex" (отзыв / обзор): всем рекомендую
24.06.2018  SergioСвязь: Уважаемое автор. Прочитал статью про NetBeans и ...
21.06.2018  SergioНаконец-то, нормальная работа с LESS в NetBeans: Уважаемое "дупло"(автор). Как включить LESS в Net...
12.04.2018  SlowpokeИщем PHP-программиста, Москва, 40.000: Вакансия еще актуальна? Хотел бы попробовать свои ...

Статсы