功能参数的解构

时间:2017-10-10 15:30:49

标签: javascript ecmascript-6 destructuring

让我们假设我们有这样的功能:

const func = (a, b, {c: {d}}) => {console.dir(c)}

如何调用此函数以及第3个参数的结构是什么? 我尝试了很多变体,但总是出错:Cannot destructure property d of 'undefined' or 'null'.

谢谢!

2 个答案:

答案 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}

的简写