我们在学习原型之前首先了解一下javascript当中的普通对象和函数对象。最普通的对象是具有_ _ proto_ _这个属性它(指向其原型链),注意: 普通的对象是没有prototype这个属性的! 如果你调用必然返回undefined;凡是用Function()创建的都是函数对象。 比如自定义函数, 事件函数 系统的Object、Array、Date、String、RegEx 以上都属于函数对象。这里的Function是比较特殊的函数对象, 因为Function.prototype本身它应该指向是原型对象, 但Function的prototype却是函数对象。 函数对象都是Function的实例对象就如同Array是通过Function创建出来的。因为Array是Function的实例,是实例就会有._ _ proto_ _ 这个属性, 从上面的流程图上看 一个函数对象的_ _ proto_ _属性值是: ƒ () { [native code] } 而特殊的Function.prototype的值也是一个: ƒ () { [native code] } 所以我们可以推断出一个条件: 函数对象._ _ proto_ _ === Function.prototype 是成立的! 返回true native code 的意思是它是程序自带的,是二进制编译的无法显示出来代码, native code是本地代码, 这里我们就简单的解释一下即可!