this字面意思是当前,当前执行代码的环境对象或者是上下文。代表着当前函数执行的环境上下文,
那么何为环境上下文,通俗的说,谁调用了函数,谁就是这个函数的环境上下文即this就指向谁(this指向调用函数的对象)
this的指向:this在不同地方指向不同的对象,取决于当前所处的环境
1.在全局作用域下this指向window
console.log(this);
2.在普通函数中this取决于谁调用,谁调用我,this就指向谁,跟如何定义无关
function fn() {
console.log(this);
};
fn();
3.在定时器中this指向window
window.setTimeout(function() {
console.log(this);
}, 3000);
4. 在对象的方法里this指向当前对象 ldh
var ldh = {
myname: '刘德华',
age: '18岁',
sex: '男',
skill: function() {
console.log(this);
}
};
ldh.skill();
5.给指定元素绑定事件,this指向事件绑定者 btn
var btn = document.querySelector('button');
btn.onclick = function() {
console.log(this);
};
6.构造函数里面的this指向对象的实例化 构造函数在调用的时候 使用new
function Fun() {
console.log(this);
}
var fun = new Fun();
fun.uname = '某某某';
fun.age = '18岁';
fun.sex = '男';
console.log(fun);
- 在ES5可以通过apply、call以及bind来修改函数中的this指向。
- 在ES6中,箭头函数的this问题:
- this的指向不能使用call和apply以及bind
- 箭头函数中this的指向是固定的,this指向箭头函数所处的上下文对象的作用域
7.箭头函数中this指向案列
let obj = {
a: function() {
console.log(this);
//指向obj
setTimeout(() => {
console.log(this);
//指向obj
}, 1000)
}
}
obj.a()