从作为参数传递给JavaScript中另一个函数的函数中提取参数

时间:2018-10-14 05:45:50

标签: javascript function arguments

我是JavaScript新手。我有一个小程序,其中一个函数将另一个函数作为参数。我试图提取/访问作为参数传递的函数的参数。这是一个示例:

function test(precondition, postcondition, func)   {
   // Extract arguments of func which in this case should be 5 and 6
   // This is required to check whether isNumber(5) and isNumber(6)
   // both return true, so that precondition is met
 }

var add = test((isNumber, isNumber), isNumber,
            function add(x, y) {return x+y; });

console.log(add (5, 6));

isNumber是一个函数,如果输入是数字(已经定义),则返回true。 试图提供规则所要求的最少的可执行代码。任何帮助是极大的赞赏。谢谢!

3 个答案:

答案 0 :(得分:1)

这里是一个解决方案,只需要您更改test中的代码即可(您的电话要求测试我将(isNumber, isNumber)替换为[isNumber, isNumber]的地方)。

您无需执行任何特殊操作即可访问add的参数,因为您可以在test内创建该函数并将其返回以供console.log(add(5, 6));调用。

在任何函数中使用arguments将为您提供函数的参数作为数组。

...中的func(... arguments);是散布操作,它接受一个数组并将其扩展到适当的位置。参见spread operator

function test(precondition, postcondition, func)   {
   // Extract arguments of func which in this case should be 5 and 6
   // This is required to check whether isNumber(5) and isNumber(6)
   // both return true, so that precondition is met  
  return function() {
    for (const i in arguments) {
      const argi = arguments[i];
      const precondition_i = precondition[i];
      console.log('precondition['+i+'] met: ' + precondition_i(argi));
    }
    const r = func(... arguments);
    console.log('postcondition met: ' + postcondition(r));
    return r;
  };
 }

var add = test([isNumber, isNumber], isNumber, function add(x, y) {return x+y; });

console.log(add(5, 6));

或者是一种不太通用的解决方案,它不使用arguments...并且不以precondition的形式传递数组:

function test(precondition, postcondition, func)   {
  // Extract arguments of func which in this case should be 5 and 6
  // This is required to check whether isNumber(5) and isNumber(6)
  // both return true, so that precondition is met  
  return function(x, y) {
    console.log('precondition met for x: ' + precondition(x));
    console.log('precondition met for y: ' + precondition(y));
    const r = func(x, y);
    console.log('postcondition met: ' + postcondition(r));
    return r;
  };
 }

var add = test(isNumber, isNumber, function add(x, y) {return x+y; });

console.log(add(5, 6));

答案 1 :(得分:0)

尝试在test内部调用add,仅传递add的参数,而不传递函数调用:

 function add(a,b){
     test(a,b)
     //and some code
 }

答案 2 :(得分:0)

var test=function(d,c){
    this.a=d;
    this.b=c;
    this.add=function(){
        return this.a+this.b;
    }
}
var my_test=new test(5,6);
console.log(my_test.a);   // return 5
console.log(my_test.b);  // return 6
console.log(my_test.add());  //return 11