Есть ли стандартный способ сохранить значения по умолчанию и перезаписать их необязательным аргументом?
Да, есть стандартный способ сделать это через Object.assign
const myFunction = (props) => {
const config = Object.assign({
slopeModifier: 2,
minDistance: 30,
lockScrollIfHorizontal: true,
callback: null,
}, props.options);
// ...
};
export default myFunction;
Также имеется более новый Доступный синтаксис Rest / Spread , который показывает ответ Альберто .
const config = {
slopeModifier: 2,
minDistance: 30,
lockScrollIfHorizontal: true,
callback: null,
... props.options
};
Является ли это решение хорошей практикой?
Переопределение конфигурации по умолчанию этим способом хорошо. Мое беспокойство было бы с помещением других аргументов в ваш объект параметров. Если требуются другие аргументы, вы можете сделать их официальными параметрами самостоятельно и иметь options
последний (необязательный) параметр.
const myFunction = (arg1, arg2, props) => ...;
const options = {minDistance: 50, slope: 3};
myFunction(arg1, arg2, options);
Также , Я получаю предупреждение eslint (guard-for-in), может ли мой код вызвать какие-либо ошибки?
Может. Как указывают документы , возможно, что кто-то может добавить свойства к prototype
для любого типа объекта, который вы передадите в качестве параметров, и вы будете выбирать эти свойства прототипа в дополнение к любым свойствам. были добавлены непосредственно к объекту. Это было бы плохой практикой, но не случайно:
// someone else's code, maybe in a third-party library that thought it was being clever.
Object.prototype.foo = "bar";
// Your code
for(const prop in {"1": 2}) { console.log(prop); }
Вывод:
1
"bar"