7

JS原型链

参考:mdn js秘密花园 hattle的博客
对于js的原型链概念,一直都没有一个清晰的认知,最近看了许多参考资料,才算把这一块内容大致弄明白。

基本概念

  • 在js中,一切皆对象

  • 每个对象都有一个指向它的原型的的内部链接(此链接还没有规范的访问方式,一般用__proro__代替),这个原型也有自己的原型,直到每个对象的原型为null为止

  • 任意一个函数都可以作为构造器即var someFun = new AnyFun()

  • 每个函数都有一个prototype属性,其它对象没有,该属性也是一个对象,该对象有一个constructor属性指向该函数

  • 使用new去实例化一个函数后,得到的是一个对象。该函数的实例的原型指向构造函数的prototype属性

图示

图片来自 Hattle的博客
图片描述
上面图片可以很好的表明js中原型链的关系。

  • Object.prototype是凭空产生的

  • Function.prototype可看作是由Object产生的

  • Object可看作是Function产生的

  • Function可看作是由自己创建的

和原型有关的API

  1. instanceof, 测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性

    `object instanceof constructor`

    检测 constructor.prototype 是否存在于参数 object 的原型链上

  2. Object.getPrototypeOf(obj)得到obj的原型


heeefei
168 声望12 粉丝