JavaScript - 如果函数作为参数传递,是否可以在计算函数之前将其作为字符串返回?
JavaScript - If a function is passed as an argument, can it be returned as a string before the function is evaluated?
考虑以下代码:
function add(a,b) { return a + b; }
function displayFunction(func) {
console.log(_WHAT_SHOULD_GO_HERE_); // I want to log 'func' to the console
}
displayFunction(add(2,3)); // I want this to log "add(2,3)"
这甚至可以在 JavaScript 中完成吗?
您可以按如下方式传递:
displayFunction("add(2,3)");
现在您可以使用eval()
方法来评估了。我不推荐使用 eval()
方法,但你可以使用它来实现。
function displayFunction(func) {
console.log(func); // return 'add(2,3)'
console.log(eval(func)); // return 5
}
另一种方法是将函数和参数作为单独的参数传递,并在日志之后调用函数:
function add(a,b) { return a + b; }
function displayFunction(func) {
console.log(arguments);
func.apply(null, arguments[1]);
}
displayFunction(add,[2,3]);
执行此操作的另一种方法是自己将其记录在函数的顶部。
在你的代码中,你可以这样做
this.add = function(a,b) { return a + b; }
function displayFunction(funcName) {
var args = [].slice.call(arguments,1);
console.log("calling " + funcName + "(" + args + ")");
console.log(this[funcName].apply(this,args));
}
displayFunction.call(this,"add",2,3);
jsfiddle: https://jsfiddle.net/29v2nrtt/1/
编辑:我看到另一个答案,他们在其中将参数作为数组传递,而我的答案将它们单独传递。也许有理由避免将您的参数作为数组传递,所以我会保留这个回答以防对任何人有帮助。
考虑以下代码:
function add(a,b) { return a + b; }
function displayFunction(func) {
console.log(_WHAT_SHOULD_GO_HERE_); // I want to log 'func' to the console
}
displayFunction(add(2,3)); // I want this to log "add(2,3)"
这甚至可以在 JavaScript 中完成吗?
您可以按如下方式传递:
displayFunction("add(2,3)");
现在您可以使用eval()
方法来评估了。我不推荐使用 eval()
方法,但你可以使用它来实现。
function displayFunction(func) {
console.log(func); // return 'add(2,3)'
console.log(eval(func)); // return 5
}
另一种方法是将函数和参数作为单独的参数传递,并在日志之后调用函数:
function add(a,b) { return a + b; }
function displayFunction(func) {
console.log(arguments);
func.apply(null, arguments[1]);
}
displayFunction(add,[2,3]);
执行此操作的另一种方法是自己将其记录在函数的顶部。
在你的代码中,你可以这样做
this.add = function(a,b) { return a + b; }
function displayFunction(funcName) {
var args = [].slice.call(arguments,1);
console.log("calling " + funcName + "(" + args + ")");
console.log(this[funcName].apply(this,args));
}
displayFunction.call(this,"add",2,3);
jsfiddle: https://jsfiddle.net/29v2nrtt/1/
编辑:我看到另一个答案,他们在其中将参数作为数组传递,而我的答案将它们单独传递。也许有理由避免将您的参数作为数组传递,所以我会保留这个回答以防对任何人有帮助。