我们今天来研究一下关于Function和Object两大内置类的相互关系
假设我们有一个数组arr = [10,20,30];
数组也是对象,所以它内部除了"项"和length以外,还有原型链__proto__,指向的是Array内置数组类的原型prototype
同样,函数类也有原型和原型链,那函数Function的prototype自然也指向Function.prototype原型对象,而函数Function也属于Function自己的实例,所以函数Function的__proto__也指向Function.prototype
注:其他值型对象都属于"object",而Function.prototype却属于"function",虽然此原型的类型是一个函数,但是它是一个匿名空函数empty/anonymous,它的相关操作和其他值型对象没有任何区别
Object作为一个函数类,它的原型链__proto__自然是指向Function.prototype,而它的原型prototype肯定也是指向的自己的prototype对象
所以由此得出了一个变态的结论:
每个函数都是Function的实例
所以Function自己也是自己的实例
Function instanceof Function //true
函数类的原型链指向函数类自己的原型
Function.__proto__ === Function.prototype //true
Object作为一个类(一个函数),它是Function的一个实例;
Function虽然是一个函数类,但它也是一个对象,所以他也是Object的一个实例;
Object.__proto__.__proto__ === Object.prototype //true
在js中的任何实例(任何值【除了值类型的值】)最后都可以基于自己的__proto__找到Object.prototype,也就是所有的值都是Object的实例=>万物皆对象。