Node.js常用工具


タイトルなし
util.inheits
util.inhersはオブジェクト間の原型継承を実現する関数です.
JavaScriptのオブジェクト指向特性は、プロトタイプに基づいており、一般的なベースクラスとは異なります.JavaScriptは対象継承の言語レベル特性を提供しておらず、プロトタイプコピーによって実現されます.
ここではutil.inheitsの使い方だけを紹介します.例は以下の通りです.

    
    
    
    
  1. var util = require('util');
  2. function Base() {
  3. this.name = 'base';
  4. this.base = 1991;
  5. this.sayHello = function() {
  6. console.log('Hello ' + this.name);
  7. };
  8. }
  9. Base.prototype.showName = function() {
  10. console.log(this.name);
  11. };
  12. function Sub() {
  13. this.name = 'sub';
  14. }
  15. util.inherits(Sub, Base);
  16. var objBase = new Base();
  17. objBase.showName();
  18. objBase.sayHello();
  19. console.log(objBase);
  20. var objSub = new Sub();
  21. objSub.showName();
  22. //objSub.sayHello();
  23. console.log(objSub);
ベースオブジェクトベースベースとベースから継承されたSubを定義しました.ベースは3つの構造関数で定義された属性とプロトタイプで定義された関数を持っています.運転結果は以下の通りです.

    
    
    
    
  1. base
  2. Hello base
  3. { name: 'base', base: 1991, sayHello: [Function] }
  4. sub
  5. { name: 'sub' }
注意:Subはベースのプロトタイプで定義された関数だけを継承していますが、構造関数内部で作成されたベース属性とsayHello関数はSubに継承されていません.
また、プロトタイプで定義されている属性は、consolone.logを対象とした属性出力にはなりません.もし私たちがobjSub.sayHelloを外したら.この行のコメントは、次のようになります.
注意:Subはベースのプロトタイプで定義された関数だけを継承していますが、構造関数内部で作成されたベース属性とsayHello関数はSubに継承されていません.
また、プロトタイプで定義されている属性は、consolone.logを対象とした属性出力にはなりません.もし私たちがobjSub.sayHelloを外したら.この行のコメントは、次のようになります.

     
     
     
     
  1. node.js:201
  2. throw e; // process.nextTick error, or 'error' event on first tick
  3. ^
  4. TypeError: Object #<Sub> has no method 'sayHello'
  5. at Object.<anonymous> (/home/byvoid/utilinherits.js:29:8)
  6. at Module._compile (module.js:441:26)
  7. at Object..js (module.js:459:10)
  8. at Module.load (module.js:348:31)
  9. at Function._load (module.js:308:12)
  10. at Array.0 (module.js:479:10)
  11. at EventEmitter._tickCallback (node.js:192:40)
util.inspect
util.inspectは、任意のオブジェクトを文字列に変換する方法で、通常はデバッグやエラー出力に用いられます.これは少なくとも一つのパラメータobjectを受け入れます.すなわち変換する対象です.
showHddenはオプションのパラメータです.もし値がtrueであれば、より多くの隠し情報を出力します.
depthは最大再帰層数を表しています.オブジェクトが複雑であれば、出力情報の数をコントロールするために階数を指定できます.depthを指定しない場合、デフォルトは2階に戻り、nullとして指定された表現は再帰層数に制限されずにオブジェクトを巡回します.カラー値がtrueであれば、出力フォーマットはANSI色で符号化され、端末でより綺麗な効果を表示するために一般的に使用される.
特に、util.inspectは、オブジェクトを文字列に直接変換することは簡単ではなく、オブジェクトがtoStringメソッドを定義しても呼び出されない.

      
      
      
      
  1. var util = require('util');function Person() {this.name = 'byvoid';this.toString = function() {return this.name;};}var obj = new Person();
  2. console.log(util.inspect(obj));
  3. console.log(util.inspect(obj, true));
運転結果は:

      
      
      
      
  1. { name: 'byvoid', toString: [Function] }{ toString:{ [Function][prototype]: { [constructor]: [Circular] },[caller]: null,[length]: 0,[name]: '',[arguments]: null },
  2. name: 'byvoid' }
util.isAray(object)
与えられたパラメータが「object」である場合、配列はtrueに戻ります.そうでなければfalseに戻ります.

      
      
      
      
  1. var util = require('util');
  2. util.isArray([])// true
  3. util.isArray(new Array)// true
  4. util.isArray({})// false

util.isRegExp(object)

“object” true, false。


      
      
      
      
  1. var util = require('util');
  2. util.isRegExp(/some regexp/)// true
  3. util.isRegExp(new RegExp('another regexp'))// true
  4. util.isRegExp({})// false

util.isDate(object)

“object” true, false。


      
      
      
      
  1. var util = require('util');
  2. util.isDate(new Date())// true
  3. util.isDate(Date())// false (without 'new' returns a String)
  4. util.isDate({})// false

util.isError(object)

“object” true, false。


      
      
      
      
  1. var util = require('util');
  2. util.isError(new Error())// true
  3. util.isError(new TypeError())// true
  4. util.isError({ name: 'Error', message: 'an error occurred' })// false