原型以及原型链的学习总结

90 阅读1分钟

原型

  • 构造函数有一个prototype属性,指向构造函数的实例原型
  • 构造函数创建一个实例对象,实例对象的__proto__会指向它的实例原型
function Person(){
}
const person = new Person()
person.__proto__ === Person.prototype

原型链

  • 在查找原型属性的时候,从实例对象的__proto__指向构造函数的prototype,构造函数的prototype的__proto__指向上一级的Object的prototype,Object的prototype指向null,形成的链式结构就是原型链
Person.prototype.__proto__ === Object.prototype
Object.prototype.__proto__ === null

constructor

  • 每一个原型都有一个constructor指向它关联的构造函数
function Person(){
}
Person === Person.prototype.constructor
  • 在实例对象读取它的constructor时,其实实例对象中并没有包含constructor属性,所以会到它的原型中读取,也就是Person.prototype中读取。所以
person.constructor === Person.prototype.constructor === Persons

备注

person.proto 不推荐使用,推荐使用Object.getPrototypeOf(person)

平常工作之余可以想一想,结合工作内容去理解其实很快就会形成相对比较深刻的印象从而准确的去表达出来。