获取其中一个被调用者Function.Arguments的Function.Arguments

时间:2014-12-27 22:06:12

标签: javascript arguments throw

function validateArguments(args)
{
   if(args.length < 1 && args.length > 2)
   {
     throw new RangeError("Invalid amount of arguments. Follow the syntax");
   }
   if(typeof args[0] !== "object")
   {
     throw new TypeError("Invalid first argument type. Follow the syntax");
   } 
   if(args[1] && typeof args[1] !== "function")
   {
     throw new TypeError("Invalid second argument type. Follow the syntax");
   }
 return true;
}

我正在尝试解决的是args[1],如果它是一个函数,也可以获取参数列表。这可能吗?基本上,这是一个示例代码。

someFunction({ object:"//object" },function(data,datas,dataCall){
  //is data, datas, and dataCall too many arugments. 
  //if so how to throw the error here
});

3 个答案:

答案 0 :(得分:1)

你的args只是第一个参数。有一个特殊的arguments变量,它捕获传递给函数的所有给定参数。您可以像这样使用它:

function myFunction () {
  if (arguments.length < 1 || arguments.length > 2)
    throw new RangeError("Invalid amount of arguments. Follow the syntax")

  if (typeof arguments[0] !== "object")
     throw new TypeError("Invalid first argument type. Follow the syntax")

  if (typeof arguments[1] !== "function")
    throw new TypeError("Invalid second argument type. Follow the syntax")

  // do stuff
}

我不确定你问的是什么。如果你想在其他函数中使用你的validateArguments函数来检查它们的参数,你可以通过将它们的arguments对象/数组(类似于数组)传递给检查器来实现:

function someFunction () {
  validateArguments(arguments)

  // do stuff
}

我不明白你最后的回调是什么意思。如果你想限制参数,回调函数将会让你失去运气。您不能对函数声明施加限制(如果您不是自己编写),但是您可以控制传递给它们的内容,所以......

答案 1 :(得分:1)

  

我想要解决的是args[1],如果它是一个函数,也可以得到它的参数列表。这可能吗?

有点,但它不是100%可靠。您可以访问该函数的length property,该函数返回它的arity。例如:

function foo(a, b, c) {

}

foo.length;
// 3

如果要获取参数的名称,可以将函数转换为字符串并提取参数列表,就像in this answer一样。


但是,由于函数可以访问其参数,即使没有正式定义的参数(通过arguments),这也不是一种可靠的技术。但是没有任何一种方式。

答案 2 :(得分:0)

你可以这样做。

someFunction: function() {
    if(validateArguments(arguments)) {
        var object = arguments.shift();
        var func = arguments.shift();
        func.apply(this,arguments);
        // Do whatever you want
    }
},

您可以使用参数,它将包含所有参数列表。