2014-09-02 80 views
-1

我想问一个关于JavaScript的问题call()函数。我已经开始学习JavaScript到深处,我却无法和这个例子中,我得到的结果明白。为什么:关于JavaScript调用函数

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

,并用这个我收到提示:

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

这两个函数都存在于Array的__proto__之内,因为我知道Array是extend Function。在这个例子中返回true Array.__proto__ === Function.prototype

回答

4

类型:

typeof(Array.prototype.slice) 
> "function" 

(这是一个函数,你可以使用call - 见Function.prototype.call

typeof(Array.prototype) 
> "object" 

(这不是一个功能,你可以” t使用call - “看不到Object.prototype.call

+0

不明白点..你能解释一下吗? – Victorino 2014-09-02 21:19:08

+0

@Victorino你不明白什么?你只能'调用'一个函数,'Array.prototype'不是函数。这是什么让你困惑,特别是。 – 2014-09-02 21:24:43

+0

现在我明白了。谢谢 – Victorino 2014-09-02 21:27:38

4

call是一个函数的方法。 Array.prototype.slice是一个函数,但Array.prototype不是这样,它没有call方法。

1
Array.__proto__ === Function.prototype 

呵呵。我认为你已经偶然发现了一些内部实现,实际上并不是它的工作原理。根据您在计算机科学/软件工程方面的实际经验,我倾向于建议忽略这个特别的人为因素。

Prototype是Object类的一个实例,它们没有call方法(除非它是由用户或库定义的)。因此,Whatever.prototype.call应该按预期调用错误。

另一个perculiar行为:

对象的instanceof功能 // - >真 功能的instanceof对象 // - >真

+0

感谢您的建议,我会考虑到它。正如我现在关于一个原型链,这是这样的'阵列 - >>功能 - >>对象',我错过了一些东西? – Victorino 2014-09-02 21:36:08