Всем привет! Тема ближайших статей: Самые часто используемые модули Node.js.
Первым методом, который мы изучим, будет метод util inspect модуля, встроенного util. Этот метод позволят красиво вывести любой объект, даже если у этого объекта, как в этом примере, есть ссылка на самого себя.
var util = require('util'); var obj = { a: 5, b: 6, }; obj.self = obj; console.log( util.inspect(obj) );
Запускаем node inspect.js и видим, что, действительно, все красиво обработалось. При этом, если у объекта есть свойства inspect, и оно равно функции, то эта функция будет вызвана.
var util = require('util'); var obj = { a: 5, b: 6, inspect: function() { return 123; } }; obj.self = obj; console.log( util.inspect(obj) );
Именно ее результат будет возвращен. Например, я сделал функцию inspect и вернулся 123. Таким образом, поведение метода util inspect несколько напоминает toString. И этот метод используется в console автоматически, если она хочет добавить в log какой-то объект. Я убрал util inspect:
var util = require('util'); var obj = { a: 5, b: 6, inspect: function() { return 123; } }; obj.self = obj; console.log(obj);
Вызываю. Все работает так же. Потому что, на самом деле, console вызывает его внутри. Однако, иногда все же необходимо обращаться к util inspect явно, в первую очередь, в тех случаях, когда мы хотим вывести что-то не в console, а, например, получить строчное представление объекта для вывода в файл. Кроме того, есть дополнительные параметры util inspect: можно, например, задать глубину вывода объекта, по умолчанию два. Но они используются редко.
Следующая команда – это util format. Создадим файл format.js.
var util = require('util'); var str = util.format("My %s %d %j", "string", 123, {test: "obj"}); console.log(str);
Util format получает строку и дальше оно подставляет в нее следующие параметры. Вместо %s будет выведена строка, вместо %d будет выведено число, а далее вместо %j будет выведен объект в формате json. Если я сейчас это запущу, то вот что я получу:
{“text”:”obj”}
Обратите внимание, это формат json. Это не вывод util inspect. Соответственно, если вдруг я вместо числа передал здесь что-то еще, то при выводе я получу NaN, потому что автоматически происходит конвертация.
Метод util format также используется в console не явно. Если я сейчас возьму и перенесу это прямо в консоль:
var util = require('util'); var str = util.format("My %s %d", "string", 123, {test: "obj"}); console.log(str);
то все отлично продолжит работать:
var util = require('util'); console.log("My %s %d", "string", 123, {test: "obj"});
Следующий, последний метод util, о котором пойдет речь – это метод util inherits. Чтобы его было легче понять, я позволил себе скачать исходники Node.js и достать из них файл util.js. Это как раз и есть исходник модуля util. И там на чистом java script есть метод inherits:
exports.inherits = function(ctor, superCtor); { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value:ctor, enumerable:false, writable:true, configurable:true } }); };
Если вы знаете, как работает OOP в JavaScript, тогда вы этот метод сразу понимаете. Если же нет, то рекомендуется разобраться с этим. Впрочем, использовать его одно и так довольно просто. Достаточно создать родительский класс, конструктор, методы в прототипе.
var util = require('util'); // Parent function Animal(name) { this.name = name; } Animal.prototype.walk = function() { console.log("Running " + this.name); };
Затем, чтобы унаследовать от него, создаем конструктор потомка и вызываем util inherits:
// Потомок function Rabbit(name) { this.name = name; } util.inherits(Rabbit, Animal);
Потом добавляем в прототип методы:
Rabbit.prototype.jump = function() { console.log("Jumping " + this.name); };
Получается, что все объекты, создаваемые этим конструктором, будут наследовать от Animal. Так что если я сейчас запущу код node inherits.js, то rabbit.walk сначала вызовет метод родителя, а rabbit.jump вызовет метод потомка. Все как обычно при наследовании:
var util = require('util'); // Parents function Animal(name) { this.name = name; } Animal.prototype.walk = function() { console.log("Running " + this.name); }; // Child function Rabbit(name) { this.name = name; } util.inherits(Rabbit, Animal); Rabbit.prototype.jump = function() { console.log("Jumping " + this.name); }; // Usage var rabbit = new Rabbit("rabbit"); rabbit.walk(); rabbit.jump();
Код данного урока можно скачать отсюда.
Материал урока взят из следующего скринкаста.
We are looking forward to meeting you on our website soshace.com