gpt4 book ai didi

javascript - 使用被调用者参数列表的尾部调用函数

转载 作者:行者123 更新时间:2023-11-29 16:22:07 25 4
gpt4 key购买 nike

我正在尝试编写一个函数这将使用它的第一个参数,然后将其余的(不知道有多少)发送给另一个参数:

function consume_data() {
args = consume_data.arguments;
do_some(args[0]);
consume_the_rest(args[1], args[2], args[3] ... );
}

我是否必须使用字符串来组合调用和评估,还是有更简洁的方法?

最佳答案

传统的 JavaScript 方式......不幸的是。

function consume_data() {

do_some(arguments[0]);

var args = Array.prototype.slice.call(arguments, 1);

consume_the_rest.apply(this, args);
}

您应该使用在局部变量范围内提供的 arguments 变量。然后从 Array.prototype 中借用 .slice() 得到一个从第二个开始的参数数组。

然后使用 .apply() 方法将这些参数作为集合传递,这些参数将在 consome_the_rest 方法中解构为单独的参数。


为什么?

您需要借用 Array.prototype.slice 的原因是 arguments 对象并不是真正的数组,因此它没有原型(prototype)化的数组方法。

.apply() 的第一个参数设置调用上下文 (this 值) 您正在调用的函数,并且正如我上面提到的,args 数组将在您调用的函数的执行上下文中解构为单独的参数。这使得传递未知数量的参数成为可能。


另一种选择,但有注意事项。

如果您不关心函数的调用上下文,您实际上可以这样做...

function consume_data() {

do_some(arguments[0]);

consume_the_rest.call.apply(consume_the_rest, arguments);
}

此处的 .call() 方法与 .apply() 类似,只是您单独传递参数而不是作为集合传递参数。所以我们使用 .apply() 调用 .call(),这会将 consume_the_rest 设置为 的调用上下文。 call(),并将arguments展开,将第一个参数设置为.call()的调用上下文arg,其余为普通参数被传下去。

就好像你做了...

consume_the_rest.call(arguments[0], arguments[1], ...arguments[n])

...所以第一个参数实际上将用作调用上下文,其余参数将是您期望的。

同样,只有在您不关心所调用函数的调用上下文时才这样做。

关于javascript - 使用被调用者参数列表的尾部调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com