原型与原型链

本文共 381 字 预计花费 1 分钟

彻底搞清“原型与原型链”

prototype

  • 每个 函数 都有一个 prototype 属性,属性指向的是构造函数的原型。

  • 原型: 每一个 Javascript 对象(除 null 外)在创建的时候就会与之关联另一个对象,这个对象就是原型。

__proto__

每一个 Javascript 对象(除了 null)都具有这个属性, 指向该对象的原型

1
2
3
4
5
6
7
function Person() {

}

var person = new Person();

person.__proto__ === Person.prototype; // true

constructor

这个属性只存在于原型之上,指向相关联的构造函数。例如 Person === Person.prototype.constructor。 

实例与原型

当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止

原型与原型

原型也是一个对象,既然是对象,我们就可以用最原始的方式创建它。

1
2
3
var obj = new Object();
obj.name = 'Kevin'
console.log(obj.name) // Kevin

原型对象就是通过 Object 构造函数生成的。

原型链

1
Object.prototype.__proto__ === null // true

null 表示“没有对象”,即该处不应该有值。

由相互关联的原型组成的链状结构就是原型链

综上汇集成一张图表示

prototype

补充

__proto__ 是每个对象都有的属性,它指向对象的原型。绝大部分浏览器都支持这个非标准的方法,但是它并不存在与原型之中,调用它的效果如同 Object.getPrototypeOf(obj)

Copyright © 2017 - 2018 空脑壳 All Rights Reserved.

冀ICP备17022284号