// 仅适用于Chrome和FireFox,在IE中不工作:
Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
obj.__proto__ = proto;
return obj;
}
我们来测试一下继承。
先定义子类
function Child() {
//老样子,套路1
if (!(this instanceof Child)) {
return new Child();
}
}
然后根据套路4, 调用inherits函数进行原型继承
//注意,inherits调用不在构造函数,也不在原型对象,而是全局调用
inherits(Child, Base);最后我们调用一下child的printClassName方法,该方法在基类原型对象中实现。

子类调用基类函数-undefined.png
出现错误,child.printClassName()后输出undefined!
为什么呢?
套路5. 子类的构造函数中使用 父类.call(this),实现父类构造函数中的成员变量继承
function Child() {
//老样子,套路1
if (!(this instanceof Child)) {
return new Child();
} //增加这句话,在调用printClassName就能正常的输出Base字符串
Base.call(this);
//如果要更新基类的成员变量,请在Base.call(this)之后!
this._className = "Child"; //调用printClassName就能正常的输出Child字符串
}
Function.prototype.call()
由此可见,nodejs中的继承需要:
在构造函数中调用 父类.call(this),实现父类成员变量的继承
全局调用inherits(子类,父类) 进行父类成员函数的继承









