我正在尝试为节点中的某些自定义类实现非常简单的继承。我正在做这样的事情:
function MyClass() {
this.myFunction = function(){
//do something
}
}
function MySubclass(){
this.myOtherFunction = function(){
//do something else
}
}
util.inherits(MySubclass, MyClass)
console.log(MySubclass.super_ === MyClass); // true
var x = new MySubclass()
console.log(x instanceof MyClass); // true
x.myFunction()
如果我运行这个,我会收到错误:
TypeError: Object #<MySubclass> has no method 'myFunction'
这个确切的模式非常适合从events.EventEmitter继承。它不适用于自定义类,还是我缺少的东西?
答案 0 :(得分:8)
util.inherits
仅设置原型链。你缺少的是调用超级构造函数,以便它向this
添加内容。这是如何做到的:
function MyClass() {
this.myFunction = function() {
// Do something
};
}
MyClass.prototype.doFoo = function () {
};
function MySubclass() {
// This is doing the same as MyClass.apply(this, arguments);
MySubclass.super_.apply(this, arguments);
this.myOtherFunction = function() {
// Do some other thing
};
}
util.inherits(MySubclass, MyClass);
MySubclass.prototype.doBar = function() {
};
var x = new MySubclass();
x.myFunction();
x.myOtherFunction();
x.doFoo();
x.doBar();
您可能仍希望将这些方法移至每个原型。