是否存在在保留对象的同时对对象属性进行解构的快捷方式?

时间:2018-08-13 10:40:10

标签: javascript destructuring

如果我具有如下方法签名:

const myFunction = ({ property1, property2, property3 }) => ...

有没有办法我也可以抓住父对象?否则我必须写这个:

const myFunction = myObject => {
   const { property1, property2, property3 } = myObject
}

2 个答案:

答案 0 :(得分:2)

如果您愿意使用传统功能而不是箭头功能,则可以使用arguments对象来获得此功能:

function test({a, b}) {
  console.log(a);
  console.log(b);
  console.log(arguments[0]);
}

test({
  a: 'This is a',
  b: 'This is b',
});

(您无法在arrow函数中执行此操作,因为arrow函数没有自己的arguments绑定,它们在周围的上下文中封闭了它们,就像this和[ super。)

答案 1 :(得分:0)

在下面的示例中,您可以通过解构来访问xy属性以及cords本身:

const drawCircle = ({cords, cords: {x,y},radius}) =>
  console.log(cords, x, y, radius)

const circle = {
  cords: {
    x: 18,
    y: 30
  },
  radius: 50
}

drawCircle(circle)

有点笨拙,但是您可以通过调用以下函数来获得整个对象:

drawCircle({circle})

像这样破坏对象:

({circle, circle: {cords, cords: {x, y}, radius}})