JavaScript中这个成语的目的

时间:2015-03-03 16:50:23

标签: javascript

以下习语的目的可能是什么?

Function.apply.call(fn, console, args);

我以前从未见过申请“被叫”。

2 个答案:

答案 0 :(得分:4)

要拨打电话,我们需要'功能','此'和'参数'。

单独使用Function.applyFunction.call,您可以指定“这个”。和'论证'但不是要调用的函数,因为它们使用自己的this作为函数,所以我们需要一个额外的层来设置这个'这个'值。

你可以说:

fn.apply(console, args);

但如果fn.apply被覆盖,则无法正常工作。

答案 1 :(得分:2)

这当然不是惯用的:-)让我们看看它的作用:

  • Function.applyFunction.prototype.apply方法 - Function constructor继承它。
  • 此方法获取.calledfnthis值,console为第一个参数,args为第二个参数。< / LI>

所以这应该等同于fn.apply(console, args)fn会在console对象上使用动态console列表调用args(可能是Function.apply.call(fn, console, args)方法)。

那么为什么这样做呢?因为fn.apply(console, args)并不完全等同于fn.apply === Function.apply!只有在.apply时,情况可能并非如此 不可能有人会覆盖fn财产 - 如果他这样做是他的错 - 但是存在一个现实世界的问题:Function.prototype对象没有继承自{{1}},即使它们是可调用的。这可能发生在主机对象的错误实现中;最着名的例子是Internet Explorer's console object