关于javascript:理解原型和原型链

39次阅读

共计 904 个字符,预计需要花费 3 分钟才能阅读完成。

构造函数

function Person() {}
var person = new Person()

Person 为构造函数
person 为实例对象
每个构造函数都会有一个 prototype 属性,例如:

Person.prototype.name = 'lh'
var p1 = new Person()
console.log(p1.name) // 打印 lh

那么构造函数的 prototype 属性指向哪里呢?
答案是指向了实例对象的原型

原型


什么是原型呢?Person.prototype 就是一个原型,你也能够了解为,js 在创建对象的时候(除 null 外)会关联另外一个对象,就是原型

咱们如何示意实例和实例原型之间的关联呢?

__proto__属性

每一个实例对象都有一个__proto__属性,这个属性指向了它的实例原型

function Person() {}
var person = new Person()
// 这里打印返回为 true
console.log(person.__proto__ === Person.prototype)
构造函数有 prototype 属性指向实例原型,实例原型也有一个 constructor 属性指向构造函数
function Person() {}
var person = new Person()
// 打印为 true
console.log(Person.prototype.constructor === Person)

原型的原型

依据上图咱们能够想想,Person.prototype 这个原型对象是如何创立进去的呢?
既然是对象,那它就能够从 Object 构造函数创立进去

Person.prototype 这个原型也有个__proto__属性,这个属性指向了 Object.prototype

验证一下

function Person() {}
var person = new Person()
// 打印后果是 true
console.log(Person.prototype.__proto__ === Object.prototype)

Object 构造函数和 Object 原型关系如上图所示
Object.prototype 原型的属性__proto__指向了 null

以上的关系图就形成了 原型链

正文完
 0