【问题标题】:In IE8, apply method doesn't work在 IE8 中,应用方法不起作用
【发布时间】:2016-11-19 21:48:07
【问题描述】:

我正在使用 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..]

总是为第一个参数打印 function Array() {...}。

我有错吗?

编辑 1: 很抱歉没有提到输出。我想让 paramsConcated 到 [level, args[0], args[1], ... , args[n]]。

编辑 2: 构建后,params.concat(...args) 被 concat.apply(params.args) 替换。 所以,我不应该使用 3 个点。

【问题讨论】:

  • edit您的问题包括对代码应该做什么的描述。期望的输出是什么?
  • 所以你觉得.apply()"doesn't work" 在 IE8 中,但是你没有定义什么不工作,而是发布了你认为是解决方案。回到原来的问题怎么样。 .apply() 确实工作,但它根据 ES3 工作,这与 ES5+ 不同。
  • Function.prototype.bind.call(console.log, console)console.log.bind(console) 完全相同。 Function.prototype.bind.call(params.concat, Array);,如果你需要它(你不需要它),它与 'params.concat.bind(Array)` 完全相同。
  • @squint 你说如果我使用 es3ify 插件我可以使用 apply 吗?
  • @torazaburo 你的意思是像 'paramsConated=params.concat.bind(args)' 一样使用它?

标签: javascript


【解决方案1】:

您将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 ]

【讨论】:

    【解决方案2】:

    主要问题是你binding concat()Array 对象而不是params。这就是您在输出中得到 function Array() 的原因。

    但你所做的是不必要的。 console 是一种特殊情况,它的方法在旧版本的 IE 中不支持 .apply()。数组没有这个问题。

    那么就这样做吧:

    var params = [ level,]
    var paramsConcated = params.concat.apply(params, args)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2015-12-19
      • 2012-05-23
      • 2015-06-07
      • 2013-05-07
      • 2012-05-12
      • 2012-04-03
      相关资源
      最近更新 更多