默认情况(谁的方法就指向谁)
显示绑定
箭头函数
严格模式
第一种情况(谁的方法就指向谁)
1、
var a = 2;
var obj = {
a:1,
getVal(){
console.log(this.a);
}
}
obj.getVal(); //1
2、
class A {
a(){
console.log(this);
}
};
const f = new A();
f.a(); // A {}
3、
function fun() {
console.log(this)
};
fun(); //window,这里相当于window.fun()。
第二种情况(显示绑定)
call、apply、bind方法都能显示改变this的指向。
var value = 3;
var obj = {
value: 1
}
function get() {
console.log(this.value);
}
get(); // 3
get.call(obj); // 1
get.apply(obj); // 1
get.bind(obj)(); // 1
第三种情况(箭头函数)
箭头函数的this与function中的this指向不同,它指向其外部的上下文。
var value = 3;
var obj = {
value: 1,
get: ()=> {
console.log(this.value);
}
}
obj.get(); // 3
第四种情况 (严格模式 )
严格模式下,方法直接被调用的时候,方法内部的this不会指向window。
'use strict'
function fun() {
console.log(this)
}
fun(); //undefined