- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在函数内部的上下文中,这是代码(基于将函数的“参数”放入数组的标准模式):
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/
我是一名优秀的程序员,十分优秀!