原型和原型链

2019-01-29  本文已影响0人  LenHong

原型

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

原型链

一个对象不断的在自己的属性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 没有原型

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

上一篇 下一篇

猜你喜欢

热点阅读