JS中的this指向及改变this指向

this是包含它的函数作为方法被调用时所属的对象。
说明:这句话有点咬嘴,但一个多余的字也没有,定义非常准确,我们可以分3部分来理解它!
1、包含它的函数。2、作为方法被调用时。3、所属的对象。
全局下的 this 指向window

下面我们来看个小案例

function a(){
    var user = "hai";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();  //此处相当于window.a(),window是可以省略的

这仅是我个人的理解
在这个代码中我们可以看出在代码的结尾是由window来调用的函数a,那么这个时候this指向window,this.user,全局中没有user,所以打印出undefined。

接下来我们再看

var fn = {
    user:"美少女",
    newfn:function(){
        console.log(this.user);  //美少女
    }
}
fn.newfn();

在这里我们可以看到,因为我们调用这个newfn是通过fn.newfn()执行的,所以此时this指向fn对象,所以这个this.user就是 fn.user,所以打印出“美少女”

接下来重点来了,我们怎么改变this指向呢?

改变this指向可以通过:1.call() 2.apply() 3.bind()这三个方法
这三个方法在使用中有些不同


通过上面的这个小案例我们可以看出:
1.call方法,改变this指向后,可以直接传参,逗号隔开
2.bind方法和call方法很相似,改变this指向后,可以直接传参,逗号隔开,但是最后要加()自执行
3.apply方法,改变this指向后,需要以数组的形式传入实参

上面都是我自己的一些理解,有不对不好的地方欢迎大家一起来探讨!:-)

你可能感兴趣的:(JS中的this指向及改变this指向)