如何获取独立于变量名的JavaScript解构参数? 希望根据参数执行,但已定义默认值

如何获取独立于变量名的JavaScript解构参数? 希望根据参数执行,但已定义默认值,javascript,Javascript,在我对自我文档化代码的探索中,我使用了解构功能,但是由于我不想这样做 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 }

在我对自我文档化代码的探索中,我使用了解构功能,但是由于我不想这样做

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
}
我如何得到这些被定义的神奇论点


参数没有定义默认输入,但如何才能做到这一点?

仅在参数中不可能做到这一点-解构必然会将每个属性提取到独立的命名变量中,而不会留下对原始对象的引用。你必须用另一句话来表达,例如:

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

仅在参数中是不可能做到这一点的——解构必须将每个属性提取到一个独立的命名变量中,而不留下对原始对象的引用。你必须用另一句话来表达,例如:

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

我使用解构赋值来自文档化用作接口的可继承类。在构造上,我得到了intellisense的所有好处,当调用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)
  }
}

我使用解构赋值来自文档化用作接口的可继承类。在构造上,我得到了intellisense的所有好处,当调用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)
  }
}


您在这里谈论的内容真的一点也不清楚。您不能,您必须手动组装一个仅具有这些属性的新对象。是否要执行
等待api。dogWasherMachine(arguments[0])
?@Pointy我已澄清,但似乎另一个用户很感兴趣。您的解构分配实际上无效。它应该是
async function洗发水({lather=true,rinse=true,repeat=2}={})
这里所说的真的一点也不清楚。你不能,你必须手动组装一个只有这些属性的新对象。你想做
wait api.dogWasherMachine(参数[0])吗
?@Pointy我已经澄清了,但似乎另一个用户很感兴趣。您的分解任务实际上是无效的。它应该是
异步函数({lather=true,rinse=true,repeat=2}={})
我喜欢这个答案,因为它完成了我想做的事情。我喜欢这个答案,因为它完成了我想做的事情。但是。。。数一数你写“repeat”的次数。同意,但不破坏函数调用中的赋值(如你的问题中)函数如何自我记录到外部代码?是的,你是对的,谢谢你的回答。在这种情况下,我可能会使用TypeScript。我假设TypeScript指的是JSDoc定义?就我个人而言,我希望看到通过类似于答案的类方法将结构直接分解到实例上的能力,但是。。。数一数你写“repeat”的次数。同意,但不破坏函数调用中的赋值(如你的问题中)函数如何自我记录到外部代码?是的,你是对的,谢谢你的回答。在这种情况下,我可能会使用TypeScript。我假设TypeScript指的是JSDoc定义?就我个人而言,我希望看到通过类似于答案的类方法将结构直接分解到实例上的能力