JAVA / JS 中关于this和that

-- JAVA中关于this和that
 this 的坑,出现问题的本质就是 this 指针的指向和自己想的不一样。
 this 与上下文中可执行代码的类型有直接关系,this 的值在进入执行上下文时确定,并且在执行上下文运行期间永久不变。

揭开 this & that 之迷 - http://www.sohu.com/a/158143999_505825
 this 到底取何值?this 的取值是动态的,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。因为 this 的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境。 this 的作用就是用来指明执行上下文是在哪个上下文中被触发的对象。
 既然 this 是执行上下文确定的,那么从执行上下文的种类进行分类,可以分为3种:那么接下来我们就从 Global ExecuTIon Context 全局执行上下文,FuncTIon ExecuTIon Context 函数执行上下文,Eval Execution Context Eval执行上下文 这三类

-- JS 的this和that
 this指的是当前的对象。 that是一个临时的变量,用于保存当前对象的this状态。(that可以随便取名)。
Page({
  data: {
  },
  onLoad:function(){
    var that = this;
    this.a = 1;
    console.log(this.a)
    setTimeout(function () {
      console.log(this.a)
      console.log(that.a)
    }, 1000)
  }
})
原理说明:(有3个log,我简称log1,log2,log3)
log1打印1,这里this指的是onLoad函数对象的a的值.
log2打印结果是undefined , 这里this指的是setTimeout里面的匿名函数对象,它是没有a的。
log3打印出1,这里that代表的是onLoad函数对象的a的值。

$('#conten').click(function(){
      //this是被点击的#conten
      var that =this;
      $('.conten').each(function(){
          //this是.conten循环中当前的对象
          //that仍是刚才被点击我的#conten
      })
  })

在javascript中,this代表的是当前对象。 var that=this就是将当前的this对象复制一份到that变量中。
$(‘#zhetenga’).click(function(){ 
  // this是被点击的#zhetenga 
  var that = this;
  $(‘.zhetenga’).each(function(){
     // this是.zhetenga循环中当前的对象 
     // that仍然是刚才被点击的#zhetenga 
  }); 
}); 
可以看到,this对象在程序中随时会改变,而var that=this之后,that没改变之前仍然是指向当时的this,这样就不会出现找不到原来的对象。

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/90738615