this的英语意思就是“这个”,可以把他给汉译一下就很好理解了。
但是因为是代码, 就会this指代的可能情况就多了一些,就不知道指向谁,这个this就代表谁了。
亘古不变的规则就是:当前函数的执行对象 。 指向的是对象。
打印this就能得到当前函数
let obj = {
name:"admin",
like:"ball",
show:function(){
console.log(this)
}
}
{name: “admin”, like: “ball”, show: ƒ}这个就是obj了,记住规则判断就好了。
2.当函数没有明确隶属对象的时候,这个时候this指的一般就是window,原理是因为,你没有指定,所以就找最大的对象,也就是window咯。(这种情况也叫默认绑定)****
比如这样:
<script>
function fn(){
console.log("this")
}fn()
</script>
3.不管这个函数时谁的,有没有所属对象,只要作为参数传递,通过参数执行这个函数,一般情况下都是window (隐式丢失)
因为作为参数传递了,这个时候这个this执行就丢了,找不到了,所以就还找window
// 传参的情况
function abc(qwe){
qwe();
}
abc(obj.show);
qwe = obj.show
qwe();
还有一点:不是所有的回调函数中的this都指向window,某些特殊情况下,被系统修改了。
document.addEventListener("click",function(){
console.log(this) //document
})
obox.addEventListener("click",function(){
console.log(this) //obox
})
这个this指向不是很难,但是也很重要,所以要熟练掌握他,多多练习。