Javascript 将数组转换为逗号分隔的变量而不应用

Javascript 将数组转换为逗号分隔的变量而不应用,javascript,Javascript,我正在尝试重新实施申请实习。我想出了一个简单的解决方案,在对象的上下文中执行函数,方法是在对象上临时装饰该函数,然后删除它。但我不知道在调用时如何传递fn逗号分隔的参数,因为它们是数组形式 如何在不应用、调用或绑定的情况下将数组转换为逗号分隔的变量 function apply(fn, context, args) { context.fn = fn; var result = context.fn(); delete context.fn; return result; }

我正在尝试重新实施申请实习。我想出了一个简单的解决方案,在对象的上下文中执行函数,方法是在对象上临时装饰该函数,然后删除它。但我不知道在调用时如何传递fn逗号分隔的参数,因为它们是数组形式

如何在不应用、调用或绑定的情况下将数组转换为逗号分隔的变量

function apply(fn, context, args) {
  context.fn = fn;
  var result = context.fn();
  delete context.fn;
  return result;
}

function add(a,b) {
  return a + b + this.num;
}

console.log(apply(add, {num: 10}, [3, 4])); //17
编辑:

我不希望将我的值拆分为字符串。我想把我的价值观分成几个部分。这基本上就是当你把一个数组传递给它时,引擎盖下的作用

尝试以下操作:


[1,2,3,4,5]。加入(“,”)

您可以在ES6中借助以下工具来完成此操作:

console.log(…myArray)

在撰写本文时,FF37和诸如和之类的Transpiler支持此功能

另一种方法是通过循环传递参数。大致如下:

myArray.forEach(curriedconsolog)


也就是说,我不认为仅仅使用
apply

有什么害处,因为您的函数只能接收两个参数,这将起作用:

function apply(fn, context, args) {
  context.fn = fn;
  var result = context.fn(args[0],args[1]);
  delete context.fn;
  return result;
}

function add(a,b) {
  return a + b + this.num;
}

console.log(apply(add, {num: 10}, [3, 4]));
函数应用(fn、上下文、参数){
context.fn=fn;
while(参数长度){
context.fn=context.fn(args.shift());
}
return context.fn;
}
立方函数(a){
返回函数(b){
返回函数(c){
返回a*b*c/this.num;
}
}
}
功能添加(a){
返回函数(b){
返回a+b+this.num;
}
}
编写(应用(添加,{num:10}[3,4]);
文件。写(“
”); 写(应用(cubus,{num:10},[3,4,5]);

查看一下

是否使用连接<代码>加入(',')
还是我真的误解了这个问题?对不起,这里有一个沟通错误。我不要绳子。我希望我的值用逗号运算符分隔好了,你没有说不要使用
eval
,所以你可以对
join
生成的字符串使用
eval
,但一般来说最好避免使用。然而,您的用例听起来像是一个特例,因为您正在重新创建一个内置函数。@creditenson是的,我认为您可能是对的。实现这一点的唯一方法似乎是使用eval()。谢谢nvm,我试过了,
eval
将返回逗号运算符的结果,因此在您的示例中,它返回
4
。嘿,我想我没有正确地表达我的问题。我刚刚更新了我的问题,这只是一个演示预期输入和输出的示例。我需要一个更广义的解决方案。
function apply(fn, context, args) {
    context.fn = fn;
    while (args.length) {
        context.fn = context.fn(args.shift());
    }
    return context.fn;
}

function cubus(a) {
    return function (b) {
        return function (c) {
            return a * b * c / this.num;
        }
    }
}

function add(a) {
    return function (b) {
        return a + b + this.num;
    }
}

document.write(apply(add, { num: 10 }, [3, 4]));
document.write('<br>');
document.write(apply(cubus, { num: 10 }, [3, 4, 5]));