this的指向判断规则
- 函数直接用圆括号运行,this指向是window对象: fun()
<script>
var obj={
a:1,
fun:function(){
var a=2
return function (){
return this.a
}
}
}
var a=3
var res=obj.fun()()
console.log(res) //结果:3
// 解析流程
// obj.fun = function(){
// var a=2
// return function (){
// return this.a
// }
// },
// obj.fun()=function (){
// return this.a
// }
// obj.fun()(): 此时this指向window,this.a=window.a=3
</script>
2.对象打点调用函数,this指向是对象: obj.fun()
<script>
var obj={
a:1,
fun:(function(){
var a=2
return function (){
return this.a
}
})()
}
var a=3
var res=obj.fun()
console.log(res) //结果:1
</script>
- 数组(类数组对象)中枚举出函数,this指向这个数组(类数组对象): arri
<script>
function fun1(fn){
arguments[0](3,4)
}
function fun2(){
console.log((this.length))
}
fun1(fun2,5,6,7,8) //打印结果:5
</script>
-
定时器调用函数,this指向window
-
被当做了事件处理函数,this指向触发事件的dom元素
-
用new调用函数,this指向函数体内秘密创建的空白对象
-
用apply、call、bind可以改变的this指向,this指向apply(object,[arg1,arg2])、call(object,arg1,arg2)中的对象