3

I have two classes, one Car:

var config = require('./configuration');

module.exports.Car = function(){}

module.exports.Car.prototype.set_tires = config.set_tires;
module.exports.Car.prototype.remove_tires = config.remove_tires; 

module.exports.Car.prototype.drive = function(){console.log("BRUMMM BRUMMM")}

and a Motorbike:

var config = require('./configuration');

module.exports.Motorbike = function(){}

module.exports.Motorbike.prototype.set_tires = config.set_tires;
module.exports.Motorbike.prototype.remove_tires = config.remove_tires; 

module.exports.Motorbike.prototype.drive = function(){ console.log("BR BR BRUUMM")}

As you see both implement methods from Configuration that looks like this:

module.exports.set_tires = function(tires){
    this.tires = tires;
}

module.exports.remove_tires = function(){
    console.log("The " + this.tires + " Tires will be removed");
    this.tires = null;
}

I wonder if there's another nicer way to implement the methods?? In this example I gave you there are only two shared methods, but with more you can easily lose the overview. Also I would like to know if there is a nicer way to not repeat module.exports to often?

1
  • 1
    Why do you not assign module.exports to a varible? Then you could spare yourself from writing module.exports again for each new method or property. Commented Jun 20, 2015 at 18:18

1 Answer 1

2

It seems like you want to merge two objects. You can do this with Object.assign if available:

Object.assign(Motorbike.prototype, config);

See How can I merge properties of two JavaScript objects dynamically? for alternative ways.

Sign up to request clarification or add additional context in comments.

4 Comments

Eh...not sure I'd recommend this if Firefox is the only one to have implemented it. Glad to see it's part of the standard though; libraries always implement this themselves.
I think I will go with that: npmjs.com/package/object-assign Thanks again!
@Katana314: Given that we have polyfills, there is no reason not use new APIs. Transpilers even allow us to use new syntax and behavior. I believe it is on us to drive adoption here.
@FelixKling Point taken. Also, I failed to notice this was specifically a NodeJS question (I answer lots of browser JS questions), so there's no issue there.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.