gpt4 book ai didi

javascript - 如果不实例化(新的 -'ing'): var a = Array. prototype.slice.call(arguments),这怎么可能?

转载 作者:行者123 更新时间:2023-11-29 20:11:56 25 4
gpt4 key购买 nike

在函数内部的上下文中,这是代码(基于将函数的“参数”放入数组的标准模式):

var args = Array.prototype.slice.call(arguments);

我正在尝试研究这个(我是 JavaScript 的初学者,来自 C#)。

我知道 slice 是一个实例方法,因为它是 Array 的 prototype 函数。

我也明白这不是一个静态的“效用函数”,意思是要使用它,你必须像这样new它:(示例)var myArray = new Array( ); myArray.slice(...);

call 在此处传递一个对象以将上下文更改为 arguments

与此相关,我也不知道两者之间的区别Array.prototype.slice.call([32,32,121,412])Array.prototype.slice([32,32,121,412]) 不在 call 的上下文中

那么,这是我的问题:

我只是不明白它在实例方法和静态方法之间是如何工作的……所以谁能解释一下 var args = Array.prototype.slice.call(arguments); 的错综复杂之处?

为什么不调用 new 就可以使用它?

为什么这是可能的?它不是静态方法,它必须“更新”,并且只有在您使用 call 函数时才有效...(至少在我的 C# 心态中...)

最佳答案

Array.prototype.slice.call([32, 32, 121, 412])Array.prototype.slice([32, 32, 121, 412] 的区别) 是在第一种情况下,实际的 Array [32, 32, 121, 412] 成为调用的“this”对象。换句话说,就像这段代码:[32, 32, 121, 412].slice()。仅在原型(prototype)上调用 slice 会在原型(prototype)对象的上下文中执行它,这可能不会做任何有用的事情。

关于javascript - 如果不实例化(新的 -'ing'): var a = Array. prototype.slice.call(arguments),这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170332/

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