在IE8中,apply方法不起作用

时间:2016-07-17 01:45:48

标签: javascript

我正在使用javascript ES6babel。 但我知道申请不起作用 最后,我找到了解决方案

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个点。

2 个答案:

答案 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 ]