js 原型和原型链

121 阅读1分钟

函数原型

每个函数都有一个prototype属性,它默认指向一个Object空实例对象(即称为:原型对象)

每个原型对象中有一个constructor,它指向函数对象

fn.prototype.constructor === fn // true

给原型对象添加属性(一般都是方法)===>实例对象可以访问

作用:函数的所有实例对象自动拥有原型中的属性(方法)

image.png

显式原型与隐式原型

每个函数function都有一个prototype,即显式原型,默认指向一个空的Object实例对象

每个实例对象都有一个__proto__,即隐式原型

对象的隐式原型为其对应构造函数的显式原型的值

Fn.prototype === fn.__proto__

使用new创建实例对象的时候自动添加__proto__属性

原型链

访问一个属性时

  • 先在自身属性中查找,找到返回
  • 如果没有,再沿着__proto__这条链向上查找,找到返回
  • 如果最终没找到,返回undefined 作用:查找对象的属性 原型链的尽头:Object.prototype。

所有对象均从Object.prototype身上继承属性

image.png