我想问一个关于JavaScript call()
函数的小问题。我已经开始深入学习JavaScript了,我无法理解它。为什么这个例子我得到了结果:
var args = Array.prototype.slice.call(arguments);
有了这个,我得到了错误。:
var args = Array.prototype.call(arguments);
这两个函数都存在于Array的__proto__
中,因为我知道Array是扩展函数。在此示例中,返回true Array.__proto__ === Function.prototype
答案 0 :(得分:4)
类型:
typeof(Array.prototype.slice)
> "function"
(这是一项功能,您可以使用call
- 请参阅Function.prototype.call
)
typeof(Array.prototype)
> "object"
(这不是一项功能,您无法使用call
- " 无法看到" Object.prototype.call
)
答案 1 :(得分:4)
call
是一种函数方法。 Array.prototype.slice
是一个函数,但Array.prototype
并非如此,它没有call
方法。
答案 2 :(得分:1)
Array.__proto__ === Function.prototype
鹤鹤。我认为你偶然发现了一些内部实现,实际上并不是它的工作方式。根据您在计算机科学/软件工程方面的实际经验,我很想建议忽略这个特别的艺术品。
Prototype是Object类的一个实例,它们没有call
方法(除非它由用户或库定义)。因此,Whatever.prototype.call
应该按预期调用错误。
另一种奇特的行为:
Object instanceof Function // - >真正 函数instanceof Object // - >真