this的指向

什么是this??

js中的this含义非常多,它可以是全局对象,当前对象或者任意对象,这完全取决于函数调用方式
随着函数使用场合的不同,this的值会发生改变。this指的是调用函数的那个对象
this使用场景
第一种:作为函数调用
在函数被直接调用时this绑定到到全局对象上,在浏览器中,window就是该全局对象

 var a=10;
 var b=20;
 console.log(a);//结果是10相当于window.a window.是可以省略的
 //第一种场景---直接调用--this指向
        function fn(){
            console.log(this);//window
        }
        fn()
          function fn1(){
              var c=100;
              console.log(this.c)//undefined 因为this.c 相当于window
          }
          fn1();

第二种:函数嵌套
函数嵌套产生的内部函数this不是其父函数,仍然指的全局变量

              function fn2(){
                  console.log(this);//window
              }
                  fn2()
              }
 fn0();

第三种:给dom绑定事件---this指向
指向发生改变

  document.addEventListener('click',function(){
              console.log(this);//document
          })

setTimeout()定时器的回调函数(把函数作为参数)相当于一个匿名函数
怎么改变this的指向
1:var that=this 把this存储起来
2: .bind(this)

document.addEventListener('click',function(){
              console.log(this);//document

              setTimeout(function(){
              console.log(this)//window 原因:::定时器的回调函数(把函数作为参数)==相当于一个匿名函数
            },200)
          })
 //怎么把setTimeout里面的指向改变
 //第一种        
 document.addEventListener('click',function(){
             var that=this;
             console.log(this);//document

              setTimeout(function(){
              console.log(that)//document
            },200)
          })   
//第二种
document.addEventListener('click',function(){
             console.log(this);//document

              setTimeout(function(){
              console.log(this)//document
            }.bind(this),200)
          })      

第四种:作为构造函数调用
this的指向是new那个也就是实例


function Person(name,age){
            this.name=name
            this.age=age
        }
        Person.prototype.sayName=function(){
            console.log(this.name)
        }
        var p1=new Person('lili',300)//把创建的对象赋值p1
        p1.sayName()

第五种:作为对象方法调用
哪个对象调用了this所在的成员方法,那么this就指向谁

var obj={
            name:'lulu',
            fn:function(){
                console.log(this);//obj---哪个对象调用了this所在的成员方法,那么this就指向obj
            }
        }
        obj.fn()//obj 调用

特殊例子

var fn5=obj.fn;
        fn5();//此时this指向的事windo fn5()是window调用的
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容