js的原型链涉及到函数function和对象obj,在涉及到原型链必须先清楚他们之间的关系。
1、函数必然有prototype和_proto_两个属性,所有的函数(包括自定义函数)都是Function实例的对象;
2、对象必然有_proto_属性,但不一定有prototype;实例的对象通过_proto_属性连接到构造函数的prototype属性上。而原型链就是从这两者的关系开始一层一层往下找的关系;
3、Function.prototype通过_proto_属性找到了Object.prototype,该对象的_proto_再往下找就是null了,所以不难得出结论,Function其实是Object的实例对象;
4、所谓原型链就是找原型的一种行为方式,原型链的核心其实就只有一个:属性共享和独立的控制,当你的对象实例需要独立的属性,所有做法的本质都是在对象实例里面创建属性。
5、由始至终引用类型Object只有向外指的箭头,而没有指入的箭头,原因就是“万物皆对象”,任何对象都是属于object的实例,所以最终_proto_都会指向Object的prototype中,再通过_proto_往下就为null;