关于JavaScript调用函数

时间:2014-09-02 21:13:40

标签: javascript

我想问一个关于JavaScript call()函数的小问题。我已经开始深入学习JavaScript了,我无法理解它。为什么这个例子我得到了结果:

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

有了这个,我得到了错误。:

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

这两个函数都存在于Array的__proto__中,因为我知道Array是扩展函数。在此示例中,返回true Array.__proto__ === Function.prototype

3 个答案:

答案 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 // - >真