nodejs_logo_green

Всем привет! Тема ближайших статей: Самые часто используемые модули 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. Если я сейчас это запущу, то вот что я получу:

Read More:  2. Уроки Express.js . Логгер, Конфигурация, Шаблонизация с EJS. Часть 1.

{“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();

Код данного урока можно скачать отсюда.

Read More:  14. Уроки Node.js. Отладка скриптов. Часть 2.

More-To-Come-Soon

Материал урока взят из следующего скринкаста.

We are looking forward to meeting you on our website blog.soshace.com

Share.

Comments are closed.

Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.