Javascript:将对象解包为函数参数

And*_*ltz 6 javascript python

我有一个函数,在 Javascript 中

function asd(foo, bar, baz) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这三个参数中的每一个都是必需的。

假设我将这些参数分组为一个对象:

var x = {
    foo: 10,
    bar: 20,
    baz: 30
};
Run Code Online (Sandbox Code Playgroud)

asd可以通过以x某种方式“解压”对象来调用函数吗?这可以通用吗?即,不知道 的签名asd

我正在寻找类似 kwargs 在 Python 中解包的东西:

def asd(foo, bar, baz):
    # ...

kwargs = {'foo': 10, 'bar': 20, 'baz': 30}
asd(**kwargs)
Run Code Online (Sandbox Code Playgroud)

“不,不可能”的回答是可以接受的。我只想知道这在 Javascript 中是否可行。

Aar*_*n J 13

现在这在 JavaScript 中是可能的。另一条评论指出这本身不可能是不正确的(并且在发布时不是)。它是在您提出问题大约一年后添加的 - 为多年后登陆这里的人们添加答案。

您的函数只需更改为:

function asd({foo, bar, baz}) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

你这样称呼它:

var x = {
    foo: 10,
    bar: 20,
    baz: 30
};
asd(x);
Run Code Online (Sandbox Code Playgroud)

请参阅MDN 解构分配

  • 这不会保留原始帖子想要的函数签名“function add(foo, bar, baz)”。JavaScript 中仍然没有内置的方法来实现这一点。 (4认同)
  • 嗯,你是对的,我错过了“即,不知道 asd 的签名”部分。我的错。尽管如此,一些对对象解包的谷歌搜索导致了这篇文章,所以我将留下我的答案作为间接到达这里的人们的替代方案。 (4认同)

Mat*_*oli 6

只是让像我这样来自 Google 的人更清楚一些:

不,这在 JavaScript 中是不可能的。

您必须实现一些自定义的内容才能实现此目的(请参阅其他答案)。