Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将对象作为参数扩展到函数?_Javascript - Fatal编程技术网

Javascript 如何将对象作为参数扩展到函数?

Javascript 如何将对象作为参数扩展到函数?,javascript,Javascript,我有一个对象,一个接受参数的函数,我想分散对象,使每个属性都是该函数中的参数 我在代码中做错了什么 const args = { a: 1 b: 2 } const fn = (a, b) => a + b // i am trying with no success console.log(fn(...args)) 您可以在传递的参数上使用ES6,然后只传递您的对象 const args={a:1,b:2} 常数fn=({a,b})=>a+b log(fn(arg

我有一个对象,一个接受参数的函数,我想分散对象,使每个属性都是该函数中的参数

我在代码中做错了什么

const args = {
    a: 1
    b: 2
}

const fn = (a, b) => a + b

// i am trying with no success
console.log(fn(...args))
您可以在传递的参数上使用ES6,然后只传递您的对象

const args={a:1,b:2}
常数fn=({a,b})=>a+b

log(fn(args))
您需要这样做

const fn = ({a, b}) => a + b

尽管其他答案是正确的,但它们将函数签名更改为接受一个对象,而不是两个单独的参数。下面是如何在不改变函数签名的情况下将对象的值用作函数参数。这需要
Object.values
(ES 2017)和spread运算符在运行时可用

const args = {
  a: 1,
  b: 2
}

const fn = (a, b) => a + b

fn(...Object.values(args));

请记住,这只适用于您的特定情况,因为
Object.values
返回所有对象键的值,并且不保证按字母顺序排序。如果您只想获取名为
a
b
的属性的值,您可以映射到
对象。键(arg)
并仅过滤这些值。

其他答案当然适用于特定情况,但也有一些限制。因此,我想提出一种不同的方法。其思想是向对象添加一个方法,该方法以适当的顺序返回所需参数的数组。该方法在作为参数传递给目标函数时执行,并使用spread运算符对结果进行分解

const args = {
    a: 1,
    b: 2,
    argumentify: function () { 
        return [this.a, this.b]; 
    }
};

const fn = (a, b) => a + b;

console.log(fn(...args.argumentify()));
这种方法的好处:

1) 不需要更改目标函数的签名,因此可以用于任何函数

2) 保证参数的正确顺序(据我所知,在传播对象时不能保证)


3) 如果需要,可以对其本身进行参数化。

将参数设置为数组应该可以:

const args = [1, 2]
const fn = (a, b) => a + b
console.log(fn(...args))

有关详细信息,请参见。

您不能在本例中使用
扩展语法,因为您没有将其用于可扩展的(如数组)中,这肯定与我在回答此问题时所寻找的内容更为接近。谢谢你,还有阵列?