gpt4 book ai didi

javascript - call() 和 apply() 实际上做了什么来欺骗方法来处理类似数组的对象

转载 作者:行者123 更新时间:2023-11-30 07:57:04 24 4
gpt4 key购买 nike

有很多关于 call、apply 和 bind 之间差异的信息,但我正在努力寻找有关 call 和 apply 方法究竟如何欺骗现有函数(通常接受数组)以接受类数组对象的信息。

据我了解,对这种方法的完整引用是关于在哪里可以找到该方法的说明。然后调用/应用方法将“this”参数更改为指向类数组对象。

我找遍了 JS 源代码都无济于事。

在 Math.max.apply(Math,arguements) 中,如果我们可以重新调整期望数组而不是在类数组对象上工作的函数的部分原因是由于更新“this”参数,它是如何实现的只给出 Math 的上下文是有意义的。

call 和 apply 有什么特别之处,它可以让方法在类似数组的对象上工作?

<script type="text/javascript">
function multiMax(multi){
return multi * Math.max.apply(Math,
Array.prototype.slice.call(arguments,1));
}
assert(multiMax(3, 1, 2, 3) == 9, "3*3=9 (First arg, by largest.)");
</script>

最佳答案

callapply 不能欺骗函数。

相反,当您使用它们在类似数组的对象上调用数组方法时,这是有效的,因为数组方法是有意通用的。

The [whatever] function is intentionally generic; it does not require that its this value be an Array object. Therefore it can be transferred to other kinds of objects for use as a method.

对于 Math 函数,因为它们根本不使用 this 值,所以您可以使用任何您想要的值。

关于javascript - call() 和 apply() 实际上做了什么来欺骗方法来处理类似数组的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com