构造函数,原型和原型链
构造函数
当一个函数创建好以后,我们并不知道它是不是构造函数,函数名为大写,我们也不能确定。
只有当一个函数以 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数组的原型链,和对象的原型链大致相同,如下图


浙公网安备 33010602011771号