原型和原型链的总结

我们要先理解构造函数是什么?
构造函数–构造对象的函数

fuction Hero(name,age){
   实例成员/对象成员  --跟对象相关的成员,将来使用对象的方式来调用   实例成员会根据对象的不同来发生相应的变化
  this.name = name 
  this.age  = age
  this.study = function(){
    console.log(this.name+“攻击敌人”)
   }
}
静态成员 --直接给构造函数添加的成员
Hero.version = '1.0'

调用构造函数:
new一个对象进行调用构造函数

  var hero = new Hero('刘备',18)
  hero.study()
  console.log(hero.version) //输出underfine  静态成员不能使用对象的方式来调用,要使用构造函数的方式来调用Hero.version

构造函数的原型

每一个构造函数都有一个属性(prototype原型/原型对象),它是一个对象,我们可以通过原型对象来增加一些成员

fuction Student(name,age){
  this.name = name 
  this.age  = age
}

Student.prototype.sayhi = function(){
  console.log('大家好',+this.name)
 }

 通过student构造函数,创建的对象,可以访问student.prototype中的成员
var s1 = new Student('lilei',18)
s1.sayhi()

获取对象的具体类型
constructor 构造器/构造函数    不建议
instanceof 判断某个对象是否是某个构造函数的对象

对象的原型

调用对象的属性或方法的时候,先去找对象本身的属性/方法,如果对象没有该属性或者方法,此时去调用原型中的属性和方法; 如果对象本身没有该属性或者方法,原型中也没有,此时会报错。
对象的 proto 等于 构造函数的Student.prototype
proto_是一个非标准的属性

constructor
在原型对象中有一个属性constructor 构造函数 。作用是记录了创建该对象的构造函数,是哪个构造函数创建了这个对象

三角图 构造函数 原型对象 对象 三者之间的关系

Student是一个构造函数,调用构造函数我们需要创建一个对象,创建完对象,我们可以通过对象的属性_proto_原型来访问原型对象
原型对象中有一个属性constructor构造函数,我们可以知道是哪个构造函数创建的这个对象

Student构造函数可以通过Student.prototype来访问我们的原型对象,原型对象中有一个属性constructor构造函数,我们可以知道是哪个构造函数创建的这个对象

Student原型对象也是对象,是对象的话就要用构造函数来创建,Student构造函数就是通过Object这个构造函数创建出来的,
Object构造函数可以通过object.prototype来访问我们的原型对象 , Object原型对象也是对象,那也有_proto_属性,他的属性就指向了null 原型链的最顶端为null

你可能感兴趣的:(原型和原型链的总结)