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をご覧ください。