1、对象调用,this 指向该对象(谁调用 this 就指向谁)
2、直接调用的函数,this 指向的是全局 window 对象。(在全局函数调用了函数,其实是全局的对象 Window调用了函数)
3、通过 new 的方式,this 永远被绑定在新创建的对象上,任何方式都改变不了 this 的指向(new的过程,其实在内部创建了一个空对象,然后将构造函数传入的参数和属性挂在了这个空对象上,然后返回了这个对象,所以this指向的是生成的对象实例)
tip:
由于箭头函数没有单独的 this值。箭头函数的 this与声明所在的上下文相同
call、apply、bind 三者的异同:
共同点:
1、都能改变 this 指向,第一个传递的参数都是 this 指向的对象。
2、三者都采用的后续传参的形式。
不同点:
1、call的传参是单个传递的,而 apply后续传递的参数是数组形式,而 bind没有规定,传递值和数组都可以。
2、call和 apply函数的执行是直接执行的,而 bind函数会返回一个函数,然后我们想要调用的时候才会执行。
tip:
由于箭头函数没有自己的this指针,通过 call() 或 apply() 方法调用一个函数时,只能传递参数(不能绑定this),他们的第一个参数会被忽略。
new :
用来创建新的对象
1、先创建了一个自定义对象
2、把this关键字指向刚才创建的对象
3、执行构造函数里的代码,也就是想this(已经创建的对象)添加属相和方法
4、返回this(被创建的对象)