> Function.call == Function.prototype.call
true
> Function.prototype == Function
false
为什么Function.prototype.*
方法存在为Function.*
?这似乎不一致。
这不是任何其他主要类型的情况(Array.slice
不存在但Array.prototype.slice
确实存在。)
答案 0 :(得分:18)
因为/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lncurses
collect2: Error
本身就是Function
Function
因此,console.log(Function instanceof Function);
console.log(Object.getPrototypeOf(Function) === Function.prototype);
s原型中的所有函数也可以在Function
中使用。
函数原型对象本身就是一个Function对象(它的[[Class]]是"函数")
确认这一点的另一种方法是,
Function
这意味着console.log(Function.call === Function.prototype.call);
对象和Function.call
对象是相同的。
Function.prototype.call
这意味着console.log(Function.hasOwnProperty('call'));
对象本身没有Function
属性。
call
这意味着console.log(Function.prototype.hasOwnProperty('call'));
对象具有Function.prototype
属性。
call
不存在但Array.slice
做
因为Array.prototype.slice
函数的原型是Array
对象,而不是Function
对象。
Array
这就是我们在console.log(Object.getPrototypeOf(Array) === Function.prototype);
函数上获得call
,apply
,bind
等的原因。 Array
对象已成为Array
的原型,Array
对象上也可以使用slice
。