总体规则
js中的this指向谁?
谁调用了函数,this就指向谁!
- this只能指向对象
- this指向取决于函数在哪儿调用,不取决于this写在哪儿
- this指向函数的调用者
举例:
通过函数名()直接调用,指向window
function func(){
console.log(this);
}
func();//window
通过对象.函数名()调用,指向对象
function func(){
console.log(this);
}
//自己定义的对象
var obj={
name:'testObj',
objFunc:func
};
obj.func();//obj
//dom对象
document.getElementById('divNode').onclick=function(){
console.log(this);//divNode
}
特殊情况
箭头函数的this只取决于外层(函数或全局)的作用域 和前面的有所不同
function test1(){
return function(){
console.log(this.a);
}
}
let a=2;
let obj={
a:3,
test:test1
};
let runTest=obj.test;
runTest();//2 普通函数 谁调用this就指向谁
function test2(){
return ()=>{
console.log(this.a);
}
}
let a=2;
let obj={
a:3,
test:test2
};
let runTest=obj.test;
runTest();//3 箭头函数 只取决于外层作用域
Vue中的this
vue的生命周期钩子方法(create,mount,update,destroy)里面的this都指向调用它的Vue实例
methods和data方法中的this也指向Vue实例
setTimeout
setTimeout中的this是指向window的!!!在Vue代码中使用这个方法时要注意
但是使用箭头函数了 又会改变this指向
methods:{
getItem(){
setTimeout(()=>{
console.log(this);//vue实例
},1000);
setTimeout(function(){
console.log(this);//window
},1000);
}
}