如何将函数内的参数转发给另一个函数?
我有这个:
function SomeThing(options) {
function callback(callback_name) {
if(options[callback_name]) {
// Desiring to call the callback with all arguments that this function
// received, except for the first argument.
options[callback_name].apply(this, arguments);
}
}
callback('cb_one', 99, 100);
}
我在a
参数中得到的是'cb_one',但我希望它应该是'99'。
var a = new SomeThing({
cb_one: function(a,b,c) {
console.log(arguments); // => ["cb_one", 99, 100]
console.log(a); // => cb_one
console.log(b); // => 99
console.log(c); // => 100
}
});
我该怎么做?
答案 0 :(得分:22)
使用options[callback_name].apply(this, [].slice.call(arguments,1));
[].slice.call(arguments,1)
将参数('array-like')Object
转换为包含所有参数的真实Array
,但第一个参数。
[].slice.call
也可以写为Array.prototype.slice.call
。
答案 1 :(得分:1)
你可以做Kooilnc所做的事。但就个人而言,我不喜欢写[].slice.call
或Arrray.prototype.slice.call
。相反,我这样做:
var bind = Function.bind;
var call = Function.call;
var bindable = bind.bind(bind);
var callable = bindable(call);
// this is the same as Array.prototype.slice.call
var arrayFrom = callable(Array.prototype.slice);
现在你可以简单地做到:
options[callback_name].apply(this, arrayFrom(arguments, 1));
有关bindable
和callable
与JavaScript聊天室中的人员交流的详细信息:http://chat.stackoverflow.com/rooms/17/javascript