一般来说,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,一般情况下this的最终指向的是那个调用它的对象。
1.全局作用域或者普通函数中this指向全局对象window(注意定时器里面的this指向window
console.log(this);//指向window
function fn() {
console.log(this);//指向window
}
window.fn();
window.setTimeout(function() {
console.log(this);//指向window
}, 1000);
2.方法调用中谁调用this指向谁
var o = {
sayHi: function() {
console.log(this); // this指向的是 o 这个对象
}
}
o.sayHi();
3.构造函数中this指向构造函数的实例
function Fun() {
console.log(this); // this 指向的是fun 实例对象
}
4.如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
var o = {
a:10,
b:{
fn:function(){
console.log(this.a); //undefined
}
}
}
o.b.fn();
尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西
5.箭头函数中的this引用的是最近作用域里的this,向外层作用域中,一层层查找this, 直到有this的定义
const obj = {
aaa() {
setTimeout(function () {
console.log(this);// 指向window
})
setTimeout(() => {
console.log(this);//指向obj对象
})
}
}
网友评论