15

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

我有这个:

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

我该怎么做呢?

4

2 回答 2

24

利用options[callback_name].apply(this, [].slice.call(arguments,1));

[].slice.call(arguments,1)将参数 (' array-like ')Object转换为包含除第一个参数之外的所有参数的实数Array

[].slice.call也可以写成Array.prototype.slice.call

于 2013-07-07T07:22:59.960 回答
0

你可以做 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));

有关JavaScript 聊天室中人们的更多信息bindable并与他们交谈: https ://chat.stackoverflow.com/rooms/17/javascriptcallable

于 2013-07-07T09:20:12.353 回答