10. Модуль util и наследование

Всем привет, тема ближайших глав — самые часто используемые модули Node.JS. Мы уделим им время именно сейчас, потому, что потом, когда мы будем их использовать, у нас просто не будет возможности отойти в сторону резко, и посмотреть, что как там работает.

util.inspect()

Первым методом, который мы изучим, будет метод «util.inspect()», модуля встроенного в «util». Этот метод позволяет красиво вывести любой объект, даже если у этого объекта, как в этом примере, есть ссылка на самого себя.

запускаем

Screenshot_10_01

и видим, что, действительно красиво обработалось. При этом, если у объекта есть свойство, «inspect», и оно равно функции, то эта функция будет вызвана и именно ее результат, будет возвращен. Например

Видите, я сделал функцию «inspect»

Screenshot_10_02

И вернулось «123». Таким образом поведение метода «util.inspect()», несколько напоминает «toString». И этот метод используется консолью автоматически, если она хочет залоггировать какой то объект

видите, я убрал «util.inspect()», вызываю

Screenshot_10_02

все работает так же. Потому что на самом деле консоль вызывает его внутри. Однако иногда, все же, необходимо обращаться к «util.inspect()» явно, в первую очередь в тех случаях, когда мы хотим вывести что-то не в консоль, а например получить строчное представление объекта для вывода в файл. Кроме того, есть дополнительные параметры «util.inspect()», можно например задать глубину вывода объекта, по умолчанию два, но они используются редко. Подробнее здесь.

util.format()

Следующая команда, это «util.format()». «util.format()» получает строку и дальше, следующие параметры он в нее подставляет

То есть вместо «%s» будет выведена строка «string», вместо «%d» будет выведено число «123», а далее вместо «%j» будет выведен объект в формате jason — «{test: «obj»}». Если я сейчас это запущу, то вот, что я получу

Screenshot_10_03

Обратите внимание, это формат json, это не вывод «util.inspect()». Соответственно если вдруг я вместо числа передал здесь что-то еще

То при выводе я получу «NaN», потому что  автоматически происходит конвертация.

Screenshot_10_04

Метод «util.format()» так же используется в консоли, не явно. Если я сейчас возьму это и перенесу в консоль

То все отлично продолжит работать.

Screenshot_10_05

Подробнее про «util.format()», здесь.

util.inherits()

Следующий, последний метод «util» о котором пойдет речь, это метод «util.inherits()». Чтобы было легче его понять, я позволил себе скачать исходники «Node.JS» и достать из них файл «util.js», это как раз и есть исходник модуля «util». И там, на чистом JavaScript, вот он метод

Если вы знаете как работает ООП в JavaScript, тогда вы этот метод сразу понимаете. Если же нет, то рекомендую разобраться с этим, соответствующая глава есть на сайте учебника JavaScript, разделы про объекты и наследование.

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

Достаточно создать родительский класс, конструктор, методы в прототипе. Затем, чтобы унаследовать от него, создаем конструктор потомка и вызываем «util.inherits()». Затем добавляем в прототип методы. Получается, что все объекты создаваемые этим конструктором будут наследовать от «Animal», так что если я сейчас запущу этот код, то «rabbit.walk();» сначала вызовет метод родителя, а «rabbit.jump();» вызовет метод потомка.

Screenshot_10_06

Все как обычно при наследовании. Подробнее, опять таки здесь.

3 thoughts on “10. Модуль util и наследование”

  1. В 2018 метод util.inherits получается совсем бесполезный, поскольку мы может создать два класса (class Animal и class Rabbit) и после делать наследование через extends —
    class Rabbit extends Animal {

    }

  2. исправьте jason на json
    будет выведен объект в формате jason — «{test: «obj»}». Если я сейчас это запущу, то вот, что я получу

Обсуждение закрыто.