我是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。 试图提供规则所要求的最少的可执行代码。任何帮助是极大的赞赏。谢谢!
答案 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