如何获取与变量名称无关的JavaScript分解参数?

时间:2019-06-27 00:28:29

标签: javascript

希望对参数生效,但已定义默认值

在我希望通过分解来构造自我文档代码的同时,DRY希望这样做...

async function shampoo({ lather = true, rinse = true, repeat  2 } = {}) {
  await api.dogWasherMachine(magicalArguments) // ???
  // don't want to have to do this:
  // api.dogWasherMachine({ lather, rinse, repeat })
  // currenty arguments is {} and actual input is defined
}

我如何获得这些已定义的神奇论点?

参数没有定义默认输入,但是我该怎么做?

2 个答案:

答案 0 :(得分:1)

不可能仅在参数中进行操作-进行必要的结构分解将所有属性提取到一个独立的命名变量中,而不会留下对原始对象的引用。您必须使用另一条语句来完成此操作,例如:

async function shampoo(param = {}) {
  const defaultObj = {
    lather: true,
    rinse: true,
    repeat: 2
  };
  await api.dogWasherMachine({ ...defaultObj, ...param });
}

答案 1 :(得分:1)

我使用解构赋值来自我文档化用作接口的可继承类。在构造上,我获得了智能感知的所有好处,并且在调用API时,一切都保持良好且干燥。

class washable {
  constructor({ lather = true, rinse = true, repeat = 2 } = {}) {
    this.lather = lather
    this.rinse = rinse
    this.repeat = repeat
  }
}

class dog extends washable {
  async shampoo() {
     await api.dogWasherMachine(this)
  }
}