我想将一个函数及其参数存储在一个对象中,并通过该对象调用它,如下所示:
var fn = function(x, y) {
return x + y
};
var obj = {
'args': [2, 3],
'func': fn
};
console.log(obj.func(obj['args']));

为什么此代码返回字符串"2,3undefined"
?它甚至没有' 23'如果它以字符串形式接收参数,+
将它们连接起来。如何按预期返回5?非常感谢!
答案 0 :(得分:3)
尝试使用apply来调用该函数:
var fn = function(x,y) {return x + y };
var obj = { 'args': [2, 3], 'func' : fn};
console.log(obj.func.apply(obj, obj['args']));
在您的示例中,您实际执行的操作是将整个数组作为“x”参数和未定义的y值传递。 Apply将使用提供的数组作为参数调用该函数。
答案 1 :(得分:1)
您将数组作为单个参数传递给函数
var fn = function(x,y) {return x + y };
您的通话看起来像fn([2, 3])
因此在运行时,x
等于数组,y
等于undefined
。你没有通过任何事情。
[2, 3] + undefined
被计算为字符串,因为[2, 3]
的标量值为2,3
。并且string + undefined
表达式也将第二个操作数转换为字符串,因此2,3undefined
。
要“修复”它 - 请使用Function.prototype.apply
:
fn.apply(null, [2, 3])
或在你的情况下
console.log(obj.func.apply(null, obj['args']));
参考文献: