js原型链的理解

190 阅读1分钟

先来一张经典图片:

js原型链经典图片

  1. js所有的对象(除去null,undefined)都有原型(__proto__)。所有的函数都有prototype。所有的prototype都是对象,也有原型(__proto__)。
  2. 函数的prototypeconstroctor指向自身,形成一个闭环。
  3. 函数的prototype指向Object.prototype(所以函数构建的对象的__proto也是指向Object.prototype),__proto__指向Function.prototype(所以函数调用apply, call等这些方法),Function.prototype__proto__又指向Object.prototype(所以函数调用toString, valueOf等这些方法)。
  4. 函数(如Foo)构造出来的对象(如f1)的__proto__,则f1__proto__指向Foo.prototype
  5. var a = Object.create(b)作用是a.prototype === b

好好看图,走一两遍就能明白了