JS作用域
作用域就是分为全局作用域和函数作用域,函数作用域只有function才算,if,while那些算是块级作用域,那些里面的变量到最后执行完会被提升为全局变量,还有在作用域里面,一个变量和函数的声明会被提到开头,比如就算在最后一行var一个a=5,也会被拆分成声明和赋值两步,声明的位置会被提升到当前作用域头部,函数也一样,但是函数的提升更领先于变量的声明。
JS this
function里面的this默认指向window,这是默认绑定。
写在对象里面的this默认指向这个对象,这是隐式绑定。
用bind或者call这类方法,强行将对象里面的函数this指向改变,this此时指向强行绑定的对象,这是硬绑定。
构造函数我也说不清楚,给你们看我看视频的截图自己理解
大概就是都是指向这个构造函数,这叫做构造函数绑定。
个人理解就是谁是这个函数的调用者,这个this就指向谁
JS原型对象
每一个构造函数都有一个prototype属性,它翻译过来就原型,原型的属性值是一个对象,所以也称为原型对象,一般我们会把函数的方法定义在这个原型对象上这样的话实例构造对象的时候,每个实例对象都可以共享这个原型对象上面方法,避免每个对象实例时都是为方法分配一个空间造成的内存资源浪费(如果这个方法直接定义在构造函数中的话)
JS对象原型
每个实例对象都会有一个属性__proto__,指向构造函数的prototype原型对象,也就是对象的__proto__和构造函数的prototype是===的,方法查找的规则:会现在对象自己身上找,如果没有,因为有__proto__存在,就会去构造函数的prototype上面找,有的话就用。个人的理解就是其实__proto__就是一条连接各个prototype的链子。
JS constructor构造函数
构造函数的prototype和实例对象的__proto__都有一个constructor属性
constructor指回构造函数本身,作用就是记录这个对象引用了哪个构造函数