Функция, которая принимает объект с дополнительными / по умолчанию свойствами в качестве параметра? - PullRequest
0 голосов
/ 08 мая 2018

Я понимаю, что с использованием синтаксиса ES6 можно создать функцию, которая принимает объект в качестве параметра, и этот параметр может иметь значение по умолчанию, например:

function exampleFunction(objParam = {val1: 1, val2: 2}) {
    //...
}

Если я звоню exampleFunction(), objParam получает значение по умолчанию. Однако, если я позвоню exampleFunction({val1: 3}), objParam.val2 будет undefined. Это имеет смысл, потому что по умолчанию не применяется. Можно ли каким-то образом убедиться, что objParam.val2 имеет значение, используя обозначение ES6? Я знаю, что могу добавить проверки в функцию, но это вносит несоответствие в код, и я бы предпочел этого не делать.

Редактировать: Чтобы уточнить, вот лучший пример:

function exampleFunction(param = 0, objParam = {val1: 1, val2: 2}) {
    return objParam.val1;
}
exampleFunction(); // Returns 1 (this is good)
exampleFunction(1, {val1: 2}); // Returns 2 (this is good)
exampleFunction(1, {val2: 3}); // Returns undefined (I want it to return 1)

А вот то, что у меня сейчас есть, оно работает, но несколько не элегантно:

function exampleFunction(param = 0, objParam = {val1: 1, val2: 2}) {
    if(objParam.val1 === undefined) objParam.val1 = 1
    if(objParam.val2 === undefined) objParam.val2 = 2
    ...
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Возможно, не так чисто, как вы ищете, но вы можете сделать это вместо этого

function exampleFunction(objParams) {
  const defParams = { val1: 1, val2: 2 };

  const finalParams = { ...defParams, ...objParams }
  // final params takes the default params and overwrites any common properties with incoming params

  // ...
}
0 голосов
/ 08 мая 2018

Вы можете использовать деструктурирование в параметрах для обеспечения значений по умолчанию:

function exampleFunction({val1 = 1, val2 = 2} = {}) {
  console.log(val1, val2);
}
exampleFunction({val1: 5});
exampleFunction();

Если вы хотите сохранить параметр как объект, вы можете использовать Object.assign:

function exampleFunction(origParams = {}) {
  const objParam = Object.assign({ val1: 1, val2: 2 }, origParams);
  console.log(objParam.val1, objParam.val2);
}
exampleFunction({val1: 5});
exampleFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...