美文网首页
JS中的this指向及改变this指向

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

作者: XiaoAM | 来源:发表于2019-10-30 20:58 被阅读0次

    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()这三个方法
    这三个方法在使用中有些不同

    <script>
    var a = '个'
    var obj = {
        a:this.a,
        fn: function(e,f){
            console.log(`${e}是${this.a}${f}`)
        }
    
    }
    obj.fn('你','美少女');//你是个美少女
    
    var obj2 = {
        a:'只'
    }
    obj.fn.call(obj2,'欢欢','可爱的狗');//欢欢是只可爱的狗
    obj.fn.bind(obj2,'尿尿','有趣的猫')();//尿尿是只有趣的猫
    obj.fn.apply(obj2,['哈尼','小机灵鬼']);//哈尼是只小机灵鬼
    
    </script>
    

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

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

    相关文章

      网友评论

          本文标题:JS中的this指向及改变this指向

          本文链接:https://www.haomeiwen.com/subject/oeaovctx.html