构造函数,原型和原型链

构造函数

  当一个函数创建好以后,我们并不知道它是不是构造函数,函数名为大写,我们也不能确定。

  只有当一个函数以 new 关键字来调用的时候,我们才能确定它是构造函数,

  构造函数在内部声明相同的属性,可以实现代码的复用,

  使用构造函数让每个实例化学生都有grad,sex,age这些属性,但是每个实例化对象根据自身可以传递不同的参数

function Student(){
   
  this.grad = grad
   
   this.sex = sex;
   
   this.age = age

}
const stu1 = new Student('1年级','男生','18岁')
const stu2 = new Student('2年级','男生','18岁')
const stu3 = new Student('3年级','女生','18岁')

  当使用new关键字调用的时候,会有如下几个执行过程

  1当以 new 关键字调用时,会创建一个新的内存空间,标记为 Student的实例。

  2实例内部的this指向该内存

  3给this添加属性,相当于给实例添加属性,

 

原型prototype

  所有函数都有一个属性:prototype,称之为函数原型

  默认情况下,prototype是一个普通的Object对象

  默认情况下,prototype中有一个属性,constructor,它也是一个对象,它指向构造函数本身

 

构造函数与函数原型之间关系如下图

 

隐式原型 __proto__

所有对象都有一个属性,__proto__,称之为隐式原型,__proto__就是查找对象的原型链的方式

默认情况下,隐式原型指向创建该对象的原型(prototype),然后一层层向上,直到指向null,如下图

当访问一个对象的成员时:

  1,看该对象自身是否有该成员,如果有直接使用

  2,在原型链中查找是否有该成员,如果有直接使用

 

 

原型链

就是找原型的一种行为方式,原型对象通过__proto__一级级向上查找,直到查找到Object.prototype,并最终找到null为止

原型链的原理是:让一个引用类型继承另一个引用类型的属性和方法

 

2数组的原型链,和对象的原型链大致相同,如下图

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-04-07 14:08  <hello>  阅读(54)  评论(0)    收藏  举报