doremi
doremi

Reputation: 15339

How to create new instance of parent class in javascript

I have a class that inherits from another. Within the base class, I'm wondering if it is possible to create and return a new instance of the calling parent class.

Here's an example:

Base:

var util = require('util');

var ThingBase = function(options) {
}

ThingBase.prototype.mapper = function(data) {
  // do a bunch of stuff with data and then
  // return new instance of parent class
};

Parent:

var FooThing = function(options) {
  ThingBase.call(this, options);
};

util.inherits(FooThing, ThingBase);

FooThing.someMethod = function() {
  var data = 'some data';
  var newFooThing = this.mapper(data); // should return new FooThing instance
};

The reason why I wouldn't just create a new instance from someMethod is that I want mapper to do a bunch of stuff to the data before it returns an instance. The stuff it will need to do is the same for all classes that inherit from Base. I don't want to clutter up my classes with boilerplate to create a new instance of itself.

Is this possible? How might I go about achieving something like this?

Upvotes: 3

Views: 1111

Answers (1)

Bergi
Bergi

Reputation: 665296

Assuming that FooThing.prototype.constructor == FooThing, you could use

ThingBase.prototype.mapper = function(data) {
  return new this.constructor(crunch(data));
};

All other solutions would "clutter up [your] classes with boilerplate [code]", yes, however they don't rely on a correctly set constructor property.

Upvotes: 3

Related Questions