I'm trying to implement very simple inheritance for some custom classes in node. I am doing something like this:
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()
And if I run this, I get the error:
TypeError: Object #<MySubclass> has no method 'myFunction'
This exact pattern works perfectly well for inheriting from events.EventEmitter. Does it just not work for custom classes, or is there something I'm missing?
util.inherits
only sets up the prototype chain. What you're missing is to call the super constructor so that it adds stuff to this
. Here's how to do it:
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();
You may still want to move those methods to each prototype.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With