解构可选函数参数
Destructing optional function parameters
绞尽脑汁试图获得最佳效果。假设我有一个将对象作为参数并像这样销毁它的函数:
myfunc = (options = {a:true, b:true, c:true}) => {...}
默认情况下 a b 和 c 为真。但是假设我调用 myfunc
并希望 b 为假:
myfunc({b:false})
现在好了 options.b === false
,但是 a 和 c 的值不见了。
有没有办法在不传递默认值副本的情况下完成此操作?
我尝试了一些奇怪的东西,比如
myfunc = (options = Object.assign({a:true, b:true, c:true}, options)) =>{}
但这肯定是不对的。
您可以在不使用 option
的情况下使用具有默认值的所需属性的解构的默认对象。然后使用简写属性创建一个新的。
对于其他对象,您可以使用较新的或 babeljs 对象的 rest 属性。
var myfunc = ({ a = true, b = true, c = true, ...rest } = {}) => {
const option = { a, b, c, ...rest };
console.log(option);
};
myfunc(); // take {} as default and the default values inside of the object
myfunc({ b: false }); // take b and default values
myfunc({ foo: 42 }); // take foo and all default values
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以在解构语句中传递默认值:
myFunc = ({a=true, b=true, c=true})
缺点显然是无法将选项作为一个整体来参考。
因此,也许将 options
作为参数并在函数体中进行解构是更好的选择:
myfunc = (options={}) => {
const {a=true, b=true, c=true} = options;
....
}
绞尽脑汁试图获得最佳效果。假设我有一个将对象作为参数并像这样销毁它的函数:
myfunc = (options = {a:true, b:true, c:true}) => {...}
默认情况下 a b 和 c 为真。但是假设我调用 myfunc
并希望 b 为假:
myfunc({b:false})
现在好了 options.b === false
,但是 a 和 c 的值不见了。
有没有办法在不传递默认值副本的情况下完成此操作?
我尝试了一些奇怪的东西,比如
myfunc = (options = Object.assign({a:true, b:true, c:true}, options)) =>{}
但这肯定是不对的。
您可以在不使用 option
的情况下使用具有默认值的所需属性的解构的默认对象。然后使用简写属性创建一个新的。
对于其他对象,您可以使用较新的或 babeljs 对象的 rest 属性。
var myfunc = ({ a = true, b = true, c = true, ...rest } = {}) => {
const option = { a, b, c, ...rest };
console.log(option);
};
myfunc(); // take {} as default and the default values inside of the object
myfunc({ b: false }); // take b and default values
myfunc({ foo: 42 }); // take foo and all default values
.as-console-wrapper { max-height: 100% !important; top: 0; }
您可以在解构语句中传递默认值:
myFunc = ({a=true, b=true, c=true})
缺点显然是无法将选项作为一个整体来参考。
因此,也许将 options
作为参数并在函数体中进行解构是更好的选择:
myfunc = (options={}) => {
const {a=true, b=true, c=true} = options;
....
}