如何在jquery中保留'this'的上下文

dis*_*cer 7 javascript jquery this

我有这样的事情:

var Something = function(){
  this.render = function(){};
  $(window).resize(function(){
    this.render();
  });
}
Run Code Online (Sandbox Code Playgroud)

麻烦的是,在匿名函数里面'this'指的是窗口对象.我知道我可以这样做:

var Something = function(){
  this.render = function(){};
  var tempThis = this;
  $(window).resize(function(){
    tempThis.render();
  });
}
Run Code Online (Sandbox Code Playgroud)

但有更好的方法吗?这看起来不太优雅.

Pat*_*ney 14

您找到的解决方案是大多数人使用的解决方案.常见的惯例是将你的tempThis变量称为"那个".

var Something = function(){
  this.render = function(){};
  var that = this;
  $(window).resize(function(){
    that.render();
  });
};
Run Code Online (Sandbox Code Playgroud)

  • 请在"that"之前添加"var",以便不使用您的变量来规范全局范围.另一个惯例是将此变量称为"self". (4认同)
  • 我曾经使用过"self",直到我注意到浏览器中有一个名为"self"的全局变量,有时会引用全局对象.如果你输入错误的东西,你的这个就会再次成为全局对象,并且不会抛出任何错误,并且更难以追踪,因为它*看起来像你做了正确的事情,但无论如何它都做错了! (3认同)