javascript 中的this的理解

 this是js的一个关键字,随着函数使用场合不同,this的值会发生变化,但是this总有一个原则,就是this值的是调用函数的那个对象,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁。

This绑定是js中最常出现错误的因素:

Eg:

let PageHander = {

       id = '123456',

       init:function(){

              document.addEventListener('click',function(event){

                     this.doSomething(event.type);//报错:this.doSomething is not a function

              },false);

       },

       doSomething:function(type){

              console.log(type+" "+this.id);

       }

};

PageHander.init();

对象PageHander的设计初衷是用来处理页面上的交互,实际上因为this绑定的是事件目标对象的引用,这个代码中实际上是document,而没有绑定PageHander,并且document中并没有this.doSomething方法,所以无法正常执行。

解决方法1:使用bind函数修改this.doSomething

init:function(){

              document.addEventListener('click',(function(event){

                     this.doSomething(event.type);

}).bind(this),false);

}

解决方法2 :使用ES6箭头函数,箭头函数的this指向父执行上下文里的this

init:function(){

              document.addEventListener('click',

event => this.doSomething(event.type),false);

},

      1)、如果一个函数中有this,但是它没有被上一级的对象所调用,那么this就指向window

      2)、如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象

      3)、如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的函数所调用,this指向的也只是它上一级的对象

      4)、如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值