JavaScript(NodeJS)中是否存在类似于PHP的
call_user_func_array
(http://php.net/manual/en/function.call-user-func-array.php)的等效函数。这允许使用参数数组调用函数。
在我的情况下,我必须使用将在数组中的参数调用util.format
。
这是一个非常简单的例子,试图展示它。
var util = require("util");
function my_fundtion(items) {
var format_string = "";
for (var i=0; i < items.length; i++) {
format_string += " %s";
}
return util.format(format_string, /* here I want to pass items in items array */);
}
答案 0 :(得分:2)
PHP有:
call_user_func_array('myfunc', array(1, 2, "foo", false));
虽然JS有:
myfunc.apply(null, [1, 2, "foo", false]);
第一个null
进入对象的位置。如果函数是一个方法,你将使用它。使用这种调用的一个示例是切片类似于数组的对象,这些对象根本不是数组,但看起来像一个(就像函数内部的arguments
对象一样):
Array.prototype.slice.apply(arguments, []);
一般来说,语法是:
(afunction).apply(obj|null, array of arguments)
你可以试试这个:
function my_fundtion(items) {
var format_string = "";
for (var i=0; i < items.length; i++) {
format_string += " %s";
}
var new_items = items.slice();
new_items.unshift(format_string);
return util.format.apply(null, new_items);
}
恕我直言,这是一个错误的功能方法。你试过以下这个吗?
function my_fundtion(items) {
return items.join(" ");
}
答案 1 :(得分:0)
因为函数名称引用的call_user_func_array
调用函数是字符串。所以,在JS中我们需要使用eval
。
示例:
const popup = (msg) => {
alert(msg);
}
const subject = {
popup(msg) {
alert(msg);
}
}
所以,
eval("popup").apply(null, ['hi'])
eval("subject.popup").apply(null, ['hi'])
纠正我。如果我错了。 ;)