在map或forEach中使用call函数

时间:2014-01-10 09:10:01

标签: javascript

当我想将一组数字映射到字符串时,我可以这样做:

[1,2,3,4].map(function(n){return n.toString();})

如果我这样做,我认为会得到相同的结果:

[1,2,3,4].map(Number.toString.call)

但事实并非如此。

为什么呢?它应该不起作用吗?

我现实生活中的问题是我有一系列网络工作者,我想通过这样做来终止它们:

webworkers.forEach(Worker.prototype.terminate.call);

2 个答案:

答案 0 :(得分:2)

您可以这样做:

[1,2,3,4].map(String)

String(1)返回"1"

答案 1 :(得分:1)

实际上,要使function.call生效,您还需要将 thisArg 作为上下文提供给function.call

来自MDN:

  

如果为forEach提供了thisArg参数,则在调用时它将被传递给回调,以用作其值。否则,将传递未定义的值以用作其此值。

试试这个:

webworkers.forEach(Worker.prototype.terminate.call, Worker.prototype.terminate);