我可以在以下示例中增加“this”的范围吗?

时间:2010-05-04 15:17:27

标签: javascript jquery

在使用jquery回调时,我发现'this'不再定义了。我找到了一个解决方法,即将'this'设置为另一个变量。例如,像这样:

function handler(DATA) {
       var myThis = this;

       $.post(
          'file.php',
          DATA,
          function() {

               // THIS where I need access to 'this', but its not available
               // unless I've used the 'myThis' trick above

          }
       );
}

它是这样的,但我一直在寻找“正确的方式”或“更好的方式”来做事。

这是最好的方法吗?或者还有另一个吗?

2 个答案:

答案 0 :(得分:5)

这很好。我一直在我的项目中这样做,特别是使用Ajax调用。

但是,请务必将var放在myThis之前,否则它将在全局范围内声明,您绝对不需要。

function handler(DATA) {
       var myThis = this;

       $.post(
          'file.php',
          DATA,
          function() {

               // THIS where I need access to 'this', but its not available
               // unless I've used the 'myThis' trick above

          }
       );
}

答案 1 :(得分:1)

我喜欢使用“自我”:

function handler(DATA) {
   var self = this;
   $.ajax({
      "url":"file.php",
      "type":"post",
      "data":DATA,
      "success":function() {
           // THIS where I need access to 'this', but its not available
           // unless I've used the 'myThis' trick above
      },
      "error":function(){
          alert("ERROR!")
      }
    });
}

你也可以使用jQuery的代理方法......但是对于这种情况可能会有点过分。

function handler(DATA) {
   var success = $.proxy(function(){
       // use "this" in this function to refer to the scope 
       // you were assigning to "myThis" in your example
   }, this);
   $.ajax({
      "url":"file.php",
      "type":"post",
      "data":DATA,
      "success":success,
      "error":function(){}
  });
}