如何将函数的所有但第一个参数的参数“转发”到另一个函数?

时间:2013-07-07 07:20:30

标签: javascript

如何将函数内的参数转发给另一个函数?

我有这个:

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
  }
});

我该怎么做?

2 个答案:

答案 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.callArrray.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));

有关bindablecallable与JavaScript聊天室中的人员交流的详细信息:http://chat.stackoverflow.com/rooms/17/javascript