深入了解 Array.prototype.slice.call(arguments) 的内部工作原理
了解 Array.prototype.slice 的行为。 call(arguments) 需要深入探索,而不仅仅是将参数转换为真正的数组的表面使用。
通常,当直接在数组上调用 slice() 时,它会迭代该数组的元素大批。然而,使用 .call() 和 .apply() 提供了一个独特的机会,可以在函数中手动定义 this 的值。
对于 Array.prototype.slice.call(arguments),一个数组-like 对象,拥有数字 .length 和索引属性,被替换为 this。这种替换欺骗了 slice() 假设它正在处理一个真正的数组,从而促进其正常操作。
考虑以下示例,其中使用 .call() 将没有固有数组属性的普通对象设置为 this :
var my_object = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', length: 5 }; var sliced = Array.prototype.slice.call( my_object, 3 );
值得注意的是,slice() 按预期运行,产生所需的结果:
['three','four'];
当参数对象作为 Array 中的 this 值传递时,适用相同的机制。原型.slice.call(参数)。由于参数具有 .length 属性和数字索引数组,因此 slice() 的处理方式就像在真实数组上操作一样,提供一致且可预测的结果。
以上是Array.prototype.slice.call(arguments) 如何将参数转换为数组?的详细内容。更多信息请关注PHP中文网其他相关文章!