先来一张经典图片:
- js所有的对象(除去
null,undefined)都有原型(__proto__)。所有的函数都有prototype。所有的prototype都是对象,也有原型(__proto__)。 - 函数的
prototype的constroctor指向自身,形成一个闭环。 - 函数的
prototype指向Object.prototype(所以函数构建的对象的__proto也是指向Object.prototype),__proto__指向Function.prototype(所以函数调用apply,call等这些方法),Function.prototype的__proto__又指向Object.prototype(所以函数调用toString,valueOf等这些方法)。 - 函数(如
Foo)构造出来的对象(如f1)的__proto__,则f1的__proto__指向Foo.prototype。 var a = Object.create(b)作用是a.prototype === b。
好好看图,走一两遍就能明白了