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

Unknown

объекта или в одном из его прототипов.

groom()

Также от Object наследуется метод toString, который

обычно переопределяется в экземплярах. Этот метод

возвращает представление объекта в формате String.

Вскоре вы увидите, как переопределить этот метод для

получения более точного описания наших объектов.

ShowDog

name: “Scotty”

breed: “Scottish Terrier”

Object как прототип

weight: 15

Итак, сознавали вы это или нет, но у каждого объекта,

handler: “Cookie”

который мы когда-либо создавали, был прототип — и это

был Object. Вы можете задать в качестве прототипа объ-

екта другой вид объекта, как мы сделали с прототипом

выставочных собак, но в конечном счете все цепочки

прототипов ведут к Object.

дальше 4 623

переопределение метода tostring

Использование наследования...

с переопределением встроенного поведения

При наследовании от встроенных объектов вы можете переопреде-

лять методы, содержащиеся в этих объектах. Типичный пример —

метод toString прототипа Object. Все объекты наследуют от Object,

и поэтому могут использовать метод toString для получения

простого строкового представления любого объекта, например Консоль JavaScript

console.log, для вывода представления объекта на консоль:

[Object object]

function Robot(name, year, owner) {

this.name = name;

this.year = year;

this.owner = owner;

}

Метод toString, наследу-

var toy = new Robot("Toy", 2013, "Avary");

емый от Object, не очень

хорошо справляется

console.log(toy.toString());

со своими обязанностями.

Как видите, метод toString не лучшим образом преобразует

Консоль JavaScript

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

метод toString и написать реализацию, которая создает строку

Toy Robot belonging to Avary

специально для объектов Robot:

function Robot(name, year, owner) {

// Тот же код

}

Robot.prototype.toString = function() {

Так гораздо лучше! Здесь

return this.name + " Robot belonging to " + this.owner;

используется наша

};

нестандартная

реализация toString.

var toy = new Robot("Toy", 2013, "Avary");

console.log(toy.toString());

Обратите внимание: метод toString может активизиро-

Игрушечный? Да этот

ваться, даже если вы не вызываете его напрямую. Напри-

робот работает на базе

мер, если вы используете оператор + для конкатенации

Arduino, и им даже можно

строки с объектом, JavaScript использует метод toString

управлять из JavaScript!

для преобразования объекта в строку, прежде чем объе-

динять его с другой строкой.

console.log("Robot is: " + toy);

Объект toy преобразуется в строку методом toString

перед конкатенацией. Если объект toy переопределяет

toString, то он использует этот метод.

624 глава 13

использование прототипов

ОПАСНАЯ ЗОНА

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

важно действовать осторожно при переопределении свойств и методов

встроенных объектов — вы можете случайно изменить поведение дру-

гого кода, зависящего от этих свойств для выполнения определенных

операций.

Итак, если вы собираетесь переопределять свойства в Object, прочи-

тайте сначала правила техники безопасности. Иначе в вашем коде мо-