美文网首页
原型和原型链

原型和原型链

作者: LenHong | 来源:发表于2019-01-29 11:19 被阅读0次

原型

我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象就是原型对象

  • 所有的对象,都有一个proto属性

  • 所有的函数,都有一个prototype属性(函数也是对象)

  • 所有的对象(数组、对象、函数)的proto指向它的构造函数的prototype属性值

  • obj.proto === Object.prototype (obj 是通过 Object new出来的)

原型链

一个对象不断的在自己的属性proto.proto.proto ... 中去查找某一个属性的过程

proto.proto.proto ... 就叫做原型链)

// 构造函数

function F(name) {

  this.name = name

}

// 创建示例

var f = new F('hello world')

f.toString();
  1. f 去本身的属性里面查找 toString(),没有找到

  2. f 去属性proto中查找toString(),没有找到 (f.proto === F.prototype)

3.去 F.prototype 的属性proto中查找 (f.proto.proto === F.prototype.proto === Object.proto) 找到了

下图表示原型到原型链之间的关系

如果一直往上找都没有找到,返回undefined ,最上层是Object.prototype.proto === null

构造函数和实例原型之间的关系 __proto__ 属性会指向该对象的原型 每个原型都有一个 constructor 属性指向关联的构造函数 原型对象就是通过 Object 构造函数生成的 Object.prototype.__proto__ 的值为 null 没有原型

图中蓝色的这条线组成的链状结构就是原型链

相关文章

网友评论

      本文标题:原型和原型链

      本文链接:https://www.haomeiwen.com/subject/pktxsqtx.html