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?
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?
-
new Connection(host, port = 25575, password, timeout = 5000)
what kind of syntax is this? Can you show us a more plete example of your code? We have no idea whatgetConnection
looks like, so how can we help you with it? – JLRishe Commented Dec 20, 2017 at 14:34 - Wrap the function in your own function, which allows you to change the order of parameters. – user5734311 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. – t.niese Commented Dec 20, 2017 at 14:34 -
how does
getConnection
look like? It sounds like there is something wrong intogetConnection
rather than default values – Facundo La Rocca Commented Dec 20, 2017 at 14:36 - I believe the question is about parameter's ordering rather than overriding default parameter value – The Reason Commented Dec 20, 2017 at 14:36
2 Answers
Reset to default 5You 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.
Assuming that 'getConnection' isn't your function but es 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);
}