this
注意: 本篇文章属于基础篇, 如果你不够了解,或者了解的还不完整,那么可以通过本文来复习一下
1. this 指向的类型
刚开始学习 JavaScript 的时候,this 总是最能让人迷惑,下面我们一起看一下在 JavaScript 中应该如何确定 this 的指向。
this 是在函数被调用时确定的,它的指向完全取决于函数调用的地方,而不是它被声明的地方(除箭头函数外)。当一个函数被调用时,会创建一个执行上下文,它包含函数在哪里被调用(调用栈)、函数的调用方式、传入的参数等信息,this 就是这个记录的一个属性,它会在函数执行的过程中被用到。
this 在函数的指向有以下几种场景:
- 1 作为构造函数被 new 调用;
- 2 作为对象的方法使用;
- 3 作为函数直接调用;
- 4 被 call、apply、bind 调用;
- 5 箭头函数中的 this;
下面我们分别来讨论一下这些场景中 this 的指向。
new 构造的实例对象
函数如果作为构造函数使用 new 调用时, this 绑定的是新创建的构造函数的实例
function Foo(){
console.log(this)
}
var bar = new Foo() //输入:Foo实例,this就是barjs
实际上使用 new 调用构造函数时,会依次执行下面的操作:
- 1创建一个新对象;
- 2 构造函数的 prototype 被赋值给这个新对象的 proto;
- 3 将新对象赋给当前的 this;
- 4 执行构造函数;
- 5 如果函数没有返回其他对象,那么 new 表达式中的函数调用会自动返回这个新对象,如果返回的不是对象将被忽略;