这是一个很重要的继承方式。使用util包模块的inherits方法来实现简单继承
1. inherits的继承机制源码
exports.inherits = function(ctor,superCtor)
{
ctor.super_=superCtor;
ctor.prototype = Object.create(superCtor.prototype,{
constructor :{
value: ctor,
enumerable: false,
writable: true,
configurable : true
}
});
}
inherits的实现新建了prototype一个指向superCtor.prototype的对象,ctor.prototype指向这个新对象。从而实现了从ctor>新prototype对象到->superCtor.prototype对象的链,从而实现了ctor继承superCtor.prototype的方法。
2.实现继承
这里ctor只继承了superCtor.prototype的方法,但superCtor本身的方法呢?咋承继?根据nodejs docs中的文档,看到若要完整的实现继承,还需要调用superCtor的call方法。但是还需要借助util工具包的inherits方法。
/**
* Created by Antianlu on 14-5-9.
*/
var util = require('util');
var EventEmitter = require('events').EventEmitter;
function Person(){
// 调用superCtor的call方法
EventEmitter.call(this);
}
// 使用util工具包的inherits实现继承
util.inherits(Person,EventEmitter);
Person.prototype.getName = function()
{
return this.name;
}
Person.prototype.setName = function(name)
{
this.name = name;
}
Person.prototype.sendData = function(data)
{
this.emit('data',data);
}
// 如何使用
var person = new Person();
console.log(person instanceof EventEmitter)//true
console.log(Person.super_ === EventEmitter) //true
person.on('data',function(data){
console.log(data);
})
person.sendData('It works!');