this和new有几个点要记住的。
一、this
每个函数被调用时都会自动取得两个变量:this和arguments,内部函数搜索这两个变量时只会搜索到其自身作用域为止
this对象是在运行时基于函数的执行环境绑定的,全局函数中this=window,而当函数作为某个对象的方法调用时,this等于那个对象(当然,通过call,apply等改变函数执行环境的情况下this会指向其他对象)
this绑定的优先级:
1、new
2、call、apply(显式绑定),bind(硬绑定)
3、对象中调用(隐式绑定)
4、默认绑定(全局)
箭头函数的this是根据外层作用域来决定且是无法修改的,因为箭头函数是没有自己的this的,它的this使用的就是外层的this
二、new
当new一个对象时发生了什么?
1、先创建了一个新对象,{}
2、将构造函数的this指向新对象
3、将新对象的原型[[prototype]]指向构造函数的原型对象
4、若构造函数没有返回其他对象,new中的函数调用即返回这个新对象