让我们假设我们有这样的功能:
const func = (a, b, {c: {d}}) => {console.dir(c)}
如何调用此函数以及第3个参数的结构是什么?
我尝试了很多变体,但总是出错:Cannot destructure property
d of 'undefined' or 'null'.
谢谢!
答案 0 :(得分:1)
const func = (a, b, {c: {d}}) => {console.dir(d)}
func(null, null, {c: {d: document.location}});

必须使用具有键c
的对象调用此函数,该对象具有键d
作为值的对象:
func(a, b, {c: {d: document.location }})
console.dir()
将任何JS对象作为参数。
{ c: {d}}
是一种称为对象解构的语法,它在此上下文中的目的是从作为函数参数传递的对象中解压缩字段。
{d}
是带有键d
和变量值d
({d: d}
)的对象的较短语法。
要从密钥d
下的对象解包变量c
,该对象必须初始化该密钥!但是当你进一步破坏作为参数传递的对象时,你不会将该对象作为范围内的变量。
在您提供的示例中,您将无法访问对象c
,因为它已被破坏,只有对象d
可用。要么你的代码有错误,要么就像Anurat Chapanond发布的那样。
答案 1 :(得分:0)
这是一个例子。
const func = (a, b, {c: {d}}) => {console.dir(c)},
c = { d: 'hello' }
func(1, 2, { c })
我将c定义为具有属性d的对象,该属性为字符串'hello'。
当调用func时,我传递给函数的第三个参数是一个具有属性c的对象。
{c}是{c:c}
的简写