Jquery $().每个方法都隐藏了'this'关键字

Jef*_*itz 19 javascript jquery

我正在创建一个Javascript对象,其中包含一个执行jQuery each方法的函数,如下所示:

function MyClass {

  Method1 = function(obj) { 
    // Does something here
  }

  Method2 = function() {
    $(".SomeClass").each(function() {

       // 1          2
       this.Method1(this);

    });
  }

}
Run Code Online (Sandbox Code Playgroud)

每个THIS指的是哪个对象?jQuery指的是each迭代返回的项.但是,我想This[1]参考包含类...

如何从jQuery循环中引用包含类?

sli*_*set 20

我想你可以这样做:

function MyClass {
     Method1 = function(obj) {
         //do something here
     } 

     Method2 = function () {
          var containingClass = this;
          $(".SomeClass").each(function () {
             containingClass.Method1(this);
           });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Tam*_*ege 11

来自http://docs.jquery.com/Core/each:

这意味着每次执行传入函数时(对于每个匹配的元素都是一次),'this'关键字指向特定的DOM元素.请注意,'this'不指向jQuery对象.

就个人而言,我更喜欢使用显式参数.这样,它更容易阅读:

$('#rotfl').each(function(index, domObject)
{
   var jQueryObject = $(domObject);
   // code
});
Run Code Online (Sandbox Code Playgroud)

回答你的问题:JavaScript具有动态静态范围.您可以执行以下操作:

var that = this;
$('#rotfl').each(function(index, domObject)
{
   var jQueryObject = $(domObject);
   that.DoSomething();
   // code
});
Run Code Online (Sandbox Code Playgroud)