node.jsはinheritysを利用して継承を実現します.

3577 ワード

util.inhersはオブジェクト間の原型継承を実現する関数です.JavaScriptのオブジェクト指向特性は、プロトタイプに基づいており、一般的なベースクラスとは異なります.JavaScriptは対象継承の言語レベルの特性を提供していません.プロトタイプのコピーによって実現されたのです.具体的な詳細は付録Aで議論しています.ここではutil.inheitsの使い方を紹介します.例は以下の通りです.
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);

   
   
   
   
代码laycode - v1.1

我们定义了一个基础对象 Base 和一个继承自 Base 的 Sub,Base 有三个在构造函数 内定义的属性和一个原型中定义的函数,通过 util.inherits 实现继承。运行结果如下:

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

   
   
   
   
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
コードlaycode-v 1.1
なお、Subはベースのプロトタイプで定義された関数だけを継承しており、構造関数内部で作成されたベース属性とsayHello関数はSubに継承されていない.また、プロトタイプで定義されている属性は、consolone.logを対象とした属性出力にはなりません.もし私たちがobjSub.sayHelloを外したら.この行のコメントは、次のようになります.
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Object # has no method 'sayHello'
at Object. (/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)