![](/img/trans.png)
[英]Why can't I use Array.prototype.join.call as a callback of a Promise?
[英]Why can't I use Array.join.call in place of Array.prototype.join.call
function test()
{
alert(Array.join.call(arguments,'/')) //alerts /
alert(Array.prototype.join.call(arguments,'/')) //alerts Js/JScript
alert(Array.join(arguments,'/')) //alerts Js/JScript
}
test('Js','JScript');
为什么会有这种差异? 为什么需要首先引用原型? 同样为什么即使join只需要一个分隔符参数,为什么Array.join也会给出所需的结果。
Array.join
是全局函数。 当使用电话,你传递的第一个参数是什么this
对象的体内 join
的功能,那么对于参数join
功能。
js> Array.join.call(null, [1, 2], "/")
"1/2"
Array.prototype.join
适用于Array
实例。 因此,它希望this
是实际的数组,这就是第二个示例起作用的原因。 您的第二个示例相当于调用Array.prototype.join
,并且this
对象为arguments
,而this
对象正是arguments.join("/")
。 有关详细信息,请参见MDN 。
这是必需的,因为Arguments数组实际上不是真正的Array Object。 。 该规范将其称为“类似数组”,但不包含通常与JavaScript数组相关联的任何方法,例如join
。
因此,上面的代码正在做的是使用call
直接调用Array方法,并将Arguments对象作为方法的范围传递。
本质上,它使解释器将Arguments数组视为真实的Array,以便可以在其上执行那些方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.