如何在JavaScript中覆盖默认参数

时间:2017-12-20 14:29:31

标签: javascript

我发现了很多创造性的方法来设置ES5和ES5中的默认参数。 ES6但我还没有看到如何在JavaScript中覆盖默认参数的简单示例。举个例子:

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

默认超时很好,但端口号不是。调用此函数时,JavaScript始终将第二个参数视为password参数:

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

此代码导致身份验证错误,因为假定第二个参数为password。如何在没有修改原始函数定义的情况下覆盖port 的默认参数?

2 个答案:

答案 0 :(得分:4)

您可以使用 config 对象作为函数的参数。例如:

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

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

它将保证您的订购。

答案 1 :(得分:0)

假设'getConnection'不是你的功能,而是来自一些无法访问的地方,这里有一些解决方案可以保证工作。这是一项任务是准备所有参数的功能。

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);
}