我正在使用javascript ES6
和babel
。
但我知道申请不起作用
最后,我找到了解决方案
var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
在此链接 console.log.apply not working in IE9
所以我从
取代const params = [
level,
].concat(...args)
到
var params = [ level,]
var concat = Function.prototype.bind.call(params.concat, Array);
var paramsConcated =concat.apply(params, args)
但它打印出来就像这样。
function Array() { ... }, [second arg...], [third arg..]
总是为第一个参数打印函数Array(){...}。
我有不法行为吗?
编辑1: 对不起,没有提到输出。我想让paramsConcated到[level,args [0],args [1],...,args [n]]。
编辑2: 构建之后,params.concat(... args)将替换为concat.apply(params.args)。 所以,我不应该使用3个点。
答案 0 :(得分:1)
主要问题是,您bind
concat()
Array
对象params
而不是function Array()
。这就是你在输出中得到console
的原因。
但你所做的事情是不必要的。 .apply()
是一种特殊情况,其中的方法在旧版本的IE中不支持var params = [ level,]
var paramsConcated = params.concat.apply(params, args)
。数组没有这个问题。
所以就这样做:
{{1}}
答案 1 :(得分:0)
您将Array
绑定为this
。这是bind
的作用。
我不明白为什么你试过bind
。您似乎只需要引用[].concat
。
var params = [ 123 ],
args = [ [1], 2, [3] ],
concat = Array.prototype.concat;
console.log(concat.apply(params, args)); // [ 123, 1, 2, 3 ]
console.log(params.concat(...args)); // [ 123, 1, 2, 3 ]