在JavaScript

时间:2017-08-24 07:35:03

标签: javascript ecmascript-6

场景:我有一个我要保存的对象,在保存之前我想要一个ID给对象,并在保存后返回带有它ID的对象。

我们假设我有以下基本功能:

let create = (someObj) => {
  if (!someObj.id)
    someObject.id = 'myNewIdForThisObject';

  ... // persisting happens here
  return someObj;
}

现在工作得很好,但有些人正在调用此函数没有提供对象,所以我想这样做是这样的:

let mandatory = () {
  throw new Error('Missing argument');
}

let create = (someObj = mandatory()) => {
  if (!someObj.id)
    someObject.id = 'myNewIdForThisObject';

  ... // persisting happens here
  return someObj;
}

好的,这很好,但现在他们确实提供了一个对象,但没有名字(我知道,悲伤的熊猫)。所以我可以通过破坏参数来强制命名属性:

let mandatory = () {
  throw new Error('Missing argument');
}

let create = ({name = mandatory()} = mandatory()) => {
 ...
}

这也意味着我可以在对象中拥有ID,如下所示:

let create = ({id = 'myNewIdForThisObject', name = mandatory()} = mandatory()) => {
  ... //persistence happens here
  // here I would like to return the parameter with it's ID
  // without rebuilding the object
}

我想知道的是如何在不重建函数内的对象的情况下从函数返回被破坏的参数。

我不能简单地返回arguments[0],因为默认使用它会返回分配的内容,只返回传入的内容。

有没有办法命名被破坏的对象只是简单地返回它?

1 个答案:

答案 0 :(得分:3)

不,我不认为可以在参数上使用解构,而给参数命名。以下不适合您吗?

let create = (someObj = mandatory()) => {
  const {id = 'myNewIdForThisObject', name = mandatory()} = someObj;
  someObj.id = id;
  return someObj;
}