JS世界里,一切函数都是对象!!!
为什么?
- 函数可以拥有属性和方法,只有对象才能添加属性和方法,基本类型不行
function fn() {};
fn.name = '函数fn的属性name'
fn.say = function() {
}
- 函数
fn instanceof Object === true
console.log(function(){} instanceof Object)
- 函数有原型,有
__proto__ ,整条原型链最终指向Object,
function fn() {};
console.log(fn.__proto__ === Function.prototype)
console.log(Function.prototype.__proto__ === Object.prototype)
Object.prototype的原型指向哪里?指向null,对象原型链的源头,根原型
console.log(Object.prototype.__proto__ === null)

举例说明: tips说明一下好理解__proto__可以理解写法对象__内部属性命名习惯。
var P = function() {};
P.prototype.name = function() { console.log(this.name)}
var p1 = new P(), p2 = new P();
p1.__proto__ === P.prototype;
p2.__proto__ === P.prototype;

p1.__proto__ === P.prototype;
P.__proto__ === Funciton.prototype
Array.__proto__ === Function.prototype
RegExp.__proto__ === Function.prototype
Date.__proto__ === Function.prototype
String.__proto__ === Function.prototype
Object.__proto__ === Function.prototype
Function.__proto__ === Function.prototype

继续特殊的往下分析,函数P——>Function——>Object——>null
Function.__proto__ === Function.prototype
Object Function.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null
