3

I've found lots of creative ways to set default parameters in ES5 & ES6 but I have yet to see a simple example of how to override default parameters in JavaScript. Take this example:

new Connection(host, port = 25575, password, timeout = 5000)

The default timeout is fine but the port number is not. When calling this function, JavaScript always treats the second parameter as the password parameter:

myConnection = connFactory.getConnection(process.env.IP,
                                         process.env.PORT,
                                         process.env.PASSWORD)

This code results in an authentication error because the second parameter is assumed to be password. How can I override the default parameter for port without modifying the original function definition?

7
  • new Connection(host, port = 25575, password, timeout = 5000) what kind of syntax is this? Can you show us a more complete example of your code? We have no idea what getConnection looks like, so how can we help you with it? Commented Dec 20, 2017 at 14:34
  • Wrap the function in your own function, which allows you to change the order of parameters. Commented Dec 20, 2017 at 14:34
  • 2
    This should not be that case. In this fiddle, the default parameter are corretly use and the second parameter is used as port. So I would guess the problem is somewhere else. Please create a minimal example that allows to reproduce the problem. Commented Dec 20, 2017 at 14:34
  • how does getConnection look like? It sounds like there is something wrong into getConnection rather than default values Commented Dec 20, 2017 at 14:36
  • I believe the question is about parameter's ordering rather than overriding default parameter value Commented Dec 20, 2017 at 14:36

2 Answers 2

5

You may use a config object as a parameter for your function. For example:

function foo({a='SO', b}) {
  console.log(a, b)
}

foo({b: 'Yeap', a: 'baz'}) // baz Yeap
foo({b: 'foo'}) // SO foo

It will guarantee your ordering.

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

Comments

0

Assuming that 'getConnection' isn't your function but comes from some unreachable for you place, here is one of a few solutions that will guarantee to be working. It is a function which task is to prepare all parameters.

function getConnectionRunner(host, password, optional = {port: 25575, timeout: 5000}) {
  const port = optional.port || 25575;
  const timeout = optional.timeout || 5000;

  connFactory.getConnection(host, port, password, timeout);
}

Comments

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.