Читать «Изучаем программирование на JavaScript» онлайн - страница 319

Unknown

гут появиться крайне коварные и трудноуловимые ошибки.

НЕ УВЕРЕН — НЕ ПЕРЕОПРЕДЕЛЯЙ!

Свойства Object, которые переопределять не рекомендуется:

Свойство constructor указывает на функцию-

constructor

конструктор, связанную с прототипом.

Вы уже знаете, что делает метод hasOwnProperty.

hasOwnProperty

С помощью метода isPrototypeOf можно узнать,

isPrototypeOf

является ли объект прототипом другого объекта.

propertyIsEnumerable

Метод propertyIsEnumerable проверяет, можно

ли получить доступ к свойству при переборе

всех свойств объекта.

МОЖНО ПЕРЕОПРЕДЕЛЯТЬ

Итак, теперь вы разбираетесь в прототипах и умеете правильно

выполнять переопределение. Некоторые свойства Object, которые

могут пригодиться в вашем коде:

Метод toLocaleString, как и toString, преобразует объект

екта.

toString

в строку. Этот метод переопределяется для построения

локализованной строки (страны/языка) с описанием объ

toLocaleString

valueOf — еще один метод, предназначенный для перео-

valueOf

пределения. По умолчанию он просто возвращает объект,

для которого был вызван, но вы можете переопределить

его, чтобы метод возвращал любое другое значение.

дальше 4 625

расширение встроенного поведения

Применяем наследование с пользой...

расширяя встроенный объект

Вы уже знаете, что добавление методов в прототип позволяет включить

Помните: обычно

новую функциональность во все экземпляры этого прототипа. Это от-

мы рассматриваем

носится не только к вашим собственным, но и к встроенным объектам.

строки как прими-

тивные типы, но

Для примера возьмем объект String — мы уже использовали в коде мето-

они также имеют

ды String (substring). Но что если вы захотите добавить собственный

объектную форму.

метод, чтобы он мог использоваться любым экземпляром String? Прием

JavaScript автома-

расширения объектов через прототип можно использовать и для String.

тически преобразу-

ет строку в объект,

Допустим, мы хотим расширить прототип String методом cliche, кото-

когда потребуется.

рый возвращает true, если строка содержит банальные выражения из

заранее известного списка. Вот как это можно сделать:

В прототип String добавляется

метод cliche.

String.prototype.cliche = function() {

var cliche = ["lock and load","touch base", "open the kimono"];

for (var i = 0; i < cliche.length; i++) {

Определяем клише,

которые нужно

var index = this.indexOf(cliche[i]);

найти в тексте.

if (index >= 0) {

return true;

А затем используем функцию

indexOf объекта String, чтобы

}

узнать, содержит ли стро-

}

ка искомые клише. Если поиск

return false;

окажется успешным, немедленно

возвращается значение true.

};

Обратите внимание: this —

строка, для которой вызы-

вается метод cliche.

Для тестирования создадим

Напишем код для тестирования метода:

несколько предложений, пара

из которых содержит клише.

var sentences = ["I'll send my car around to pick you up.",

"Let's touch base in the morning and see where we are",

"We don't want to open the kimono, we just want to inform them."];

Каждый элемент sentences пред-