Node.jsの共通ツール


util は、合理化されすぎているコア JavaScript 関数の欠点を補う、一般的に使用される関数のコレクションを提供する Node.js コア モジュールです。


util.inherits

util.inherits(constructor, superConstructor) は、オブジェクト間のプロトタイプの継承を実装する関数です。

JavaScript のオブジェクト指向機能はプロトタイプベースであり、一般的なクラスベースのものとは異なります。 JavaScript はオブジェクト継承の言語レベルの機能を提供しませんが、プロトタイプのコピーを通じて提供します。

ここでは util.inherits の使用法のみを紹介します:

var util = require('util'); 
function Base() { 
	this.name = 'base'; 
	this.base = 1991; 
	this.sayHello = function() { 
	console.log('Hello ' + this.name); 
	}; 
} 
Base.prototype.showName = function() { 
	console.log(this.name);
}; 
function Sub() { 
	this.name = 'sub'; 
} 
util.inherits(Sub, Base); 
var objBase = new Base(); 
objBase.showName(); 
objBase.sayHello(); 
console.log(objBase); 
var objSub = new Sub(); 
objSub.showName(); 
//objSub.sayHello(); 
console.log(objSub);

Base オブジェクト Base と Base から継承された Sub を定義します。Base にはコンストラクターで定義された 3 つのプロパティと、プロトタイプで定義された 1 つのプロパティがあります。関数、継承は util.inherits を通じて実装されます。実行結果は以下の通りです:

base 
Hello base 
{ name: 'base', base: 1991, sayHello: [Function] } 
sub 
{ name: 'sub' }

注: Sub はプロトタイプで Base によって定義された関数のみを継承し、コンストラクター内で作成された Base 属性と SayHello 関数は Sub には継承されません。

同時に、プロトタイプで定義されたプロパティは、オブジェクトのプロパティとしてconsole.logに出力されなくなります。 objSub.sayHello(); のコメントを削除すると、次のようになります:

node.js:201 
throw e; // process.nextTick error, or 'error' event on first tick 
^ 
TypeError: Object #<Sub> has no method 'sayHello' 
at Object.<anonymous> (/home/byvoid/utilinherits.js:29:8) 
at Module._compile (module.js:441:26) 
at Object..js (module.js:459:10) 
at Module.load (module.js:348:31) 
at Function._load (module.js:308:12) 
at Array.0 (module.js:479:10) 
at EventEmitter._tickCallback (node.js:192:40)

util.inspect

util.inspect(object,[showHidden],[ Depth],[colors]) は、変換するための任意のメソッドです。オブジェクトを文字列に変換し、デバッグやエラー出力によく使用されます。変換されるオブジェクトである少なくとも 1 つのパラメーター オブジェクトを受け入れます。

showHidden はオプションのパラメーターです。値が true の場合、さらに多くの非表示の情報が出力されます。

Depth は再帰レベルの最大数を表します。オブジェクトが複雑な場合、レベル数を指定して出力情報の量を制御できます。深さが指定されていない場合、デフォルトで 2 レベルの再帰が実行されます。null を指定すると、再帰レベルの数を制限せずにオブジェクトが完全に走査されます。 color 値が true の場合、出力形式は ANSI 色分けされ、通常は端末でより美しい効果を表示するために使用されます。

特に、util.inspect はオブジェクトを単純に文字列に直接変換するわけではなく、オブジェクトが toString メソッドを定義している場合でも、それは呼び出されないことに注意してください。

var util = require('util'); 
function Person() { 
	this.name = 'byvoid'; 
	this.toString = function() { 
	return this.name; 
	}; 
} 
var obj = new Person(); 
console.log(util.inspect(obj)); 
console.log(util.inspect(obj, true));

実行結果は次のとおりです:

{ name: 'byvoid', toString: [Function] } 
{ toString: 
{ [Function] 
[prototype]: { [constructor]: [Circular] }, 
[caller]: null, 
[length]: 0, 
[name]: '', 
[arguments]: null }, 
name: 'byvoid' }

util.isArray(object)

指定されたパラメータ「object」が配列の場合は true を返し、それ以外の場合は false を返します。

var util = require('util');

util.isArray([])
  // true
util.isArray(new Array)
  // true
util.isArray({})
  // false

util.isRegExp(object)

指定されたパラメータ「object」が正規表現の場合は true を返し、それ以外の場合は false を返します。

var util = require('util');

util.isRegExp(/some regexp/)
  // true
util.isRegExp(new RegExp('another regexp'))
  // true
util.isRegExp({})
  // false

util.isDate(object)

指定されたパラメータ「object」が日付の場合は true を返し、それ以外の場合は false を返します。

var util = require('util');

util.isDate(new Date())
  // true
util.isDate(Date())
  // false (without 'new' returns a String)
util.isDate({})
  // false

util.isError(object)

指定されたパラメータ「object」がエラーオブジェクトの場合は true を返し、それ以外の場合は false を返します。

var util = require('util');

util.isError(new Error())
  // true
util.isError(new TypeError())
  // true
util.isError({ name: 'Error', message: 'an error occurred' })
  // false

詳細については、http://nodejs.org/api/util.htmlをご覧ください。