我不太关心上下文,我不想使用Function()。该函数应该采用函数和参数数组。实施例
apply(fn, args) => fn(args[0], args[1], ..., args[args.length-1]);
甚至可能吗?
答案 0 :(得分:1)
var apply = function(fn, args) {
var _fn = fn;
args.forEach(function(arg) {
_fn = _fn.bind(null, arg);
});
return _fn();
};
apply(
function() { console.log(arguments); },
[ 'arg 1', 'arg 2', 'arg 3', 'arg 4' ]
);
答案 1 :(得分:0)
如果您不知道args的数量,那么这是唯一的方法:
function apply(fn, args) {
return fn.apply(null, args);
}
如果您知道号码(比如2):
function apply(fn, args) {
return fn(args[0], args[1]);
}
或者:
function apply(fn, args) {
switch (args.length) {
case 0:
return fn();
case 1:
return fn(args[0]);
case 2:
return fn(args[0], args[1]);
case 3:
return fn(args[0], args[1], args[2]);
// etc
}
}
答案 2 :(得分:0)
使用eval有一个非常讨厌的解决方案:
function apply(fn, args) {
var a = [];
for (var i = 0; i < args.length; i++){
a.push("args["+i+"]");
}
command_string = "function inner_apply(fn, args) { return fn(" + a.join(",") + ");} ";
eval(command_string);
return inner_apply(fn, args);
}
请永远不要使用这是现实生活!