Hossein Mobasher
Hossein Mobasher

Reputation: 4472

Inheritance in Node.JS

I am using node.js and programming based on express.js. I have tried to use util.inherits to implement inheritance in JavaScript. What I've tried is as follows:

//request.js
function Request() {
    this.target = 'old';
    console.log('Request Target: ' + this.target);
}

Request.prototype.target = undefined;
Request.prototype.process = function(callback) {
    if (this.target === 'new')
       return true;

    return false;
}

module.exports = Request;

//create.js
function Create() {
    Create.super_.call(this);
    this.target = 'new';
}

util.inherits(Create, Request);

Create.prototype.process = function(callback) {
    if (Create.super_.prototype.process.call(this, callback)) {
        return callback({ message: "Target is 'new'" });
    } else {
        return callback({ message: "Target is not 'new'" });
    }
}

module.exports = Create;

//main.js
var create = new (require('./create'))();
create.process(function(msg) {
    console.log(msg);
});

My scenario is :

I have Request as base class and Create as child class. Request has field target that initialize old in Request constructor.

Now, I create Create class object which first call Request constructor and then initialize target field with new. When I call process function of Create, I expect to get message of target is 'new' but it returns another!

I searched similar threads for this, but all are what i tried! Can any one explain what was wrong?

Thanks in advance :)

Upvotes: 4

Views: 2933

Answers (1)

Esailija
Esailija

Reputation: 140230

util.inherits has really awkward super_... anyway, this should work:

 Create.super_.prototype.process.call(this, callback);

But really,

 var super_ = Request.prototype;

And then the syntax becomes almost convenient:

 super_.process.call(this, callback);

Upvotes: 6

Related Questions