用被调用者的尾部调用函数'的参数列表
call a function with the tail of the callee's arguments list
我正在尝试编写一个函数这将使用它的第一个参数,然后将其余的(不知道有多少)发送给另一个:
function consume_data() {
args = consume_data.arguments;
do_some(args[0]);
consume_the_rest(args[1], args[2], args[3] ... );
}
我必须使用字符串来编写调用和eval吗?或者有更整洁的方法吗?
传统的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
对象实际上不是Array,因此它没有原型化的Array方法。
给.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])
因此,第一个参数将实际用作调用上下文,其余的将是您所期望的。
同样,只有当您不关心正在调用的函数的调用上下文时,才能执行此操作。
请参阅功能应用:
function consume_data() {
do_some(arguments.shift());
consume_the_rest.apply(this, args);
}
- 参数列表Three.js之后的未捕获语法错误:缺少)
- 是否可以在javascript函数参数列表中调用多个函数
- 参数列表(节点)后缺少)
- 从从字符串创建的函数中获取参数列表
- 参数列表后缺少未捕获的语法错误)
- 参数列表Javascript Jquery后缺少)
- 在带有参数列表的表单submit上调用一个方法
- 参数列表后的未捕获语法错误:缺少)
- 参数列表[Javascript语法错误]后的未捕获语法错误:缺少)
- 删除元素并将其添加到 javascript 中的函数参数列表中
- 缺少)在参数列表之后,这次我把它放在哪里
- Javascript ( jQuery ) 错误: 语法错误: 缺少 ) 在参数列表之后
- Function.prototype.apply:参数列表的类型错误
- 语法错误:缺少参数列表函数 () {.
- jQuery:缺少参数列表之后的 )
- 缺少 ) 在参数列表之后.我做错了什么
- Nodejs pdf2json 缺少 ) 在参数列表之后
- 将数组作为参数列表传递给具有现有参数的函数
- 缺少 ) 在 SFDC 中的参数列表之后
- 将名称数组传递给 _.bindAll - 参数列表的类型错误