Статьи

Улучшение встроенных типов Javascript

Javascript часто вводят в заблуждение как простой язык, лишенный объектно-ориентированных функций, столь любимых другими современными языками сценариев. Люди, придерживающиеся такого мнения, действительно должны по-другому взглянуть на язык, поскольку в его дружественном для новичков интерьере Javascript есть некоторые мощные языковые функции. В дополнение к поддержке функционального программирования (где функции могут передаваться в сценарии так же, как и в структурах данных, с которыми они работают), Javascript поддерживает форму ООП, известную как наследование на основе прототипов.

Сеть уже переполнена учебниками по объектно-ориентированному Javascript, поэтому вместо того, чтобы перефразировать их, я просто продемонстрирую одну из более простых вещей, которую вы можете сделать с наследованием прототипа: добавить новые возможности во встроенные типы Javascript. Ниже приведен один из моих любимых примеров:

Array.prototype.indexOf = function(value) {
for (var i = 0; i < this.length; i++) {
if (this[ i] == value) {
return i;
}
}
return -1;
}

Приведенный выше код добавляет новый метод к типу Javascript Array с именем indexOf, который принимает значение и возвращает первый индекс массива, содержащего это значение, или -1, если значение не найдено в массиве. Присваивая новое свойство прототипу класса Array, новое свойство (которое в данном случае является функцией) становится доступным для всех других объектов массива, даже тех, которые уже были созданы.

Еще один класс, который созрел для улучшения – это класс String. Вот простая функция trim (), которая возвращает копию строки с удаленными начальными и конечными пробелами:

String.prototype.trim = function() {
var match = /s*(.*?)s*/.exec(this);
return match[1];
}

На форумах SitePoint есть ветка, в которой более подробно обсуждается эта техника. Благодарю вас за то, что вы предложили это в качестве темы для записи в блоге.