1、全局环境中的this
- 浏览器环境:this指向全局对象
window - node环境:this都是空对象
{}
2、new一个实例化对象
this指向最后调用它的对象
new的实现原理
- 创建一个空的简单JavaScript对象(即{});
- 链接该对象(即设置该对象的构造函数)到另一个对象 ;
- 将步骤1新创建的对象作为this的上下文 ;
- 如果该函数没有返回对象,则返回this。
3、箭头函数
- 箭头函数的this始终指向函数定义时的this,而非执行时
4、显示绑定:bind()、call()、apply()
- bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
- call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
- apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。
区别
- call()和apply()是立即执行函数,只是接受的参数形式不同
fun.call(thisArg[, arg1[, arg2[, ...]]])fun.apply(thisArg, [argsArray])
- allly()是创建一个新的包装函数,并且返回,而不是立即执行
fun.bind(thisArg, arg1, arg2, ...)