如何使用带有可选参数命名的Apply调用函数?

时间:2018-09-06 15:17:55

标签: javascript node.js apply optional-parameters

使用此功能def:myFunc(p1, p2, p3 = 3, p4 = 4){ //do something }

我了解您可以使用Apply来调用函数, 像这样:myFunc.apply([1, 2])

其中1是p1,而2是p2。

但是在指定特定的可选参数名称时,如何使用apply ?:

myFunc(1, 2, p4=>5)

谢谢!

3 个答案:

答案 0 :(得分:4)

以与直接调用它相同的方式。调用函数时,要跳过默认参数,请传递undefined

myFunc(1, 2, undefined, 4);

您可以使用apply做同样的事情,只需在想要默认参数加入时传入undefined

function myFunc(p1, p2, p3 = 3, p4 = 4) {
    console.log("p1:", p1);
    console.log("p2:", p2);
    console.log("p3:", p3);
    console.log("p4:", p4);
}

myFunc.apply(null, [11, 22, undefined, 44]);   // skips over p3

答案 1 :(得分:2)

在JavaScript中,要传递特定的命名参数,您将需要传递一个对象。您可以使用object destructuring获得所需的结果。

{p1: 1, p2: 2, p4: 5}

function myFunc({p1, p2, p3 = 3, p4 = 4}){ console.log(p3); }


myFunc.apply(null, [{p1: 1, p2: 2, p4: 5}]);

答案 2 :(得分:0)

JavaScript没有命名参数(包括ES6)。因此,您可以猜测,您只能将apply与位置参数一起使用,因此无法按照您的方式使用apply

在ES6中,一种模拟名为args的方法是使用一个对象,例如:

myFunc({ from=3, to=5 });

具有上述技术的示例并应用(ES6):

let f = ({ p1='a', p2='b'} = {}) => { console.log(p1, p2); }
// logs 'a', 'b'
f.apply(this, [{ p1: 'c' }])
// logs 'c', 'b'

您可以在此处了解更多信息:http://2ality.com/2011/11/keyword-parameters.html