JS Refrencing" this"在回调时

时间:2014-11-27 11:12:30

标签: javascript jquery callback scope this

第1部分:

如何从回调中动态引用父属性?

例如,如果我们有这种结构。

var someClass = {

   htmlClass : 'aFunClass',

   bindEvents: function(){

      jQuery(function(){
          alert( this.htmlClass );
      });
   });
}

目前,这将返回“undefined”作为其重新呈现jQuery函数,而不是父类。

第2部分:

最有活力的做法是什么?支持下一个条件。

var someClass = {

   htmlClass : 'aFunClass',

   bindEvents: function(){
      var self = this;

      jQuery(function(){
          if( !jQuery('body').hasClass( self.htmlClass ) ){
              self = {};
          }
      });
   });
}

目前,如果你这样做 - 那么someClass保持不变,并且不会成为空对象。 因此,将其直接分配给另一个变量似乎不起作用。

2 个答案:

答案 0 :(得分:1)

使用作为您想要记住的“this”的变量:

var someClass = {

   htmlClass : 'aFunClass',

   bindEvents: function(){
      var that = this;
      jQuery(function(){
          alert( that.htmlClass );
      });
   });
}

局部变量命名的标准包括selfTHISthat等。只需选择你喜欢的东西(我倾向于在面向对象的JS中使用THIS ,但我主要使用C#所以任何“thisy”对我都有好处):))

答案 1 :(得分:0)

通常的做法是在变量中引用this上下文:

bindEvents: function(){
      var self = this; // keep a reference to this
      jQuery(function(){
          alert( self.htmlClass );
      });
   });

另一个解决方案是binding特定上下文的功能:

bindEvents: function(){
      jQuery(function(){
          alert( this.htmlClass );
      }.bind(this));
   });