原型与原型链的理解

概念

  • Js中一切皆为对象,只要是对象,就会有__proto__ 属性,该属性存储了指向其构造的指针。
    对象分为两种:函数对象普通对象,只有函数对象拥有原型对象prototype。
    1. prototype的本质是普通对象,是构造函数的原型对象;
    2. Function prototype比较特殊,是没有prototype的函数对象;
    3. new操作得到的对象是普通对象;
  • proto:每个对象都有这个属性,它指向它的构造函数的原型对象;
  • prototype:在js里,继承机制是原型继承,继承的起点是对象的原型Object prototype;
  • constructor :这是原型对象上的一个指向构造函数的属性,每个实例原型都有一个constructor属性指向关联的构造函数。
function Person(name){
    this.name=name
}
var person1 = new Person()
var person2 = new Person()

结论:

  • person1.constructor = person2.constructor = Person.prototype.constructor = Person
  • person1.proto 指向 Person.prototype
  • Person.proto 指向 Function prototype
  • Person.prototype._proto__指向 Object prototype
  • Person.prototype = { constructor,proto: { constructor, proto} }

图解

原型与原型链的理解_第1张图片

  • 构造函数的prototype属性指向原型对象,原型对象有一个 constructor 属性指回构造函数,每个构造函数生成的实例对象都有一个 proto 属性,这个属性指向原型对象。
  • 所有的实例的_ proto _都指向该构造函数的原型对象(prototype)
  • 所有的函数(包括构造函数)是Function的实例,所以所有函数的 _ proto _的都指向Function的原型对象。
  • 所有的原型对象(包括 Function的原型对象)都是Object的实例,所以 _ proto _都指向 Object(构造函数)的原型对象,而Object构造函数的 _ proto _指向 null。
  • Function构造函数本身就是Function的实例,所以 _ proto _指向Function的原型对象

你可能感兴趣的:(JS)