下面是一个函数fn
预期结果是a
, b
, c
在每次调用时定义fn
,是否传递对象参数。如果传递设置属性的对象,则应仅为该对象设置属性。
const fn = (opts = {a:1, b:2, c:3}) => console.log(opts);
当不带参数调用时,结果是
fn() // {a: 1, b: 2, c: 3}
当使用参数调用时,例如{b:7}
,预期结果是
fn({b:7}) // {a: 1, b: 7, c: 3}
然而,实际结果是
fn({b:7}) // {b: 7}
通过在函数之外定义一个对象并使用,能够获得预期的结果Object.assign()
在函数体内
const settings = {a: 1, b: 2, c: 3};
const fn = opts => {opts = Object.assign({}, settings, opts); console.log(opts)}
fn({b: 7}) // {a: 1, b: 7, c: 3}
fn(); // {a: 1, b: 2, c: 3}
/*
// does not log error; does not return expected result
const fn = (opts = Object.assign({}, settings, opts)) => console.log(opts)
*/
是否可以仅使用默认参数来实现上述结果,而无需在函数参数外部或函数体内定义引用对象?
也许我误解了这个问题,但您似乎正在为每个单独的属性寻找默认初始化程序。为此,您必须使用解构:
const fn = ({a = 1, b = 2, c = 3} = {}) => console.log({a, b, c});
如果您想保留任意属性,而不仅仅是那些您预先知道的属性,您可能会对对象休息/传播属性提议 https://github.com/tc39/proposal-object-rest-spread这可以让你写
const fn = ({a = 1, b = 2, c = 3, ...opts} = {}) => console.log({a, b, c, ...opts});
Can an opts
变量作为单个对象引用是否可以仅使用默认参数来实现,而不需要在函数参数外部或函数体内定义要引用的对象?
不可以。参数声明只能使用(部分)参数来初始化变量,并且当没有或没有时可能使用默认值(作为语法糖)undefined
参数(部分)已通过。它们无法执行无条件计算并创建从结果初始化的变量 - 这正是您在这里尝试实现的目标。
您应该为此使用函数体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)