为什么在javascript中有Function.call?
为什么为什么在javascript中有Function.call?,javascript,Javascript,为什么Function.prototype.*方法作为Function.*存在?这似乎前后矛盾 任何其他主要类型都不是这种情况(Array.slice不存在,但Array.prototype.slice存在)。因为函数本身就是函数的原型 > Function.call == Function.prototype.call true > Function.prototype == Function false 因此,Functions原型中的所有函数也可以在Function中找到 引
Function.prototype.*
方法作为Function.*
存在?这似乎前后矛盾
任何其他主要类型都不是这种情况(
Array.slice
不存在,但Array.prototype.slice
存在)。因为函数
本身就是函数
的原型
> Function.call == Function.prototype.call
true
> Function.prototype == Function
false
因此,Function
s原型中的所有函数也可以在Function
中找到
引用
函数原型对象本身就是一个函数对象(其[[类]]是“函数”)
确认这一点的另一种方法是
console.log(Function instanceof Function);
console.log(Object.getPrototypeOf(Function) === Function.prototype);
这意味着函数.call
对象和函数.prototype.call
对象是相同的
console.log(Function.call === Function.prototype.call);
这意味着函数
对象本身没有调用
属性
console.log(Function.hasOwnProperty('call'));
这意味着Function.prototype
对象具有call
属性
console.log(Function.hasOwnProperty('call'));
Array.slice
不存在,但Array.prototype.slice
do
因为Array
函数的原型是function
对象,而不是Array
对象
console.log(Function.prototype.hasOwnProperty('call'));
这就是为什么我们在
数组
函数上得到调用
,应用
,绑定
等。它数组
对象是数组
的原型,那么切片
也可以在数组
对象上使用。是的。函数是一个构造函数Array.call==Function.call
。这类似于Java“Class”类吗?@valepu类,是的。如果JavaScript是一种基于类的语言,我们会说函数
是函数
的实例,但在Java中类
不是类
的实例(因为类通常不是类
的实例或任何东西的实例)<代码>类仍然有一个奇怪的递归,因为它有一个关联的类对象,类型为Class
,类型为Class.Class==Class.Class.getClass()
。顺便说一句,我指的是Smalltalk。class
的类是class类
。class类
的类是元类
。元类
的类是元类类
。元类类
的类是元类
,因此关系实例包含循环。另外:Class
是Class
的一个子类,因此Class
不仅仅是自身的一个实例,它还是自身子类的一个实例!好吧,这确实令人困惑!我甚至不知道我刚刚读到了什么