2009-06-11 66 views
19

我創建一個包含執行一個jQuery each方法像下面這樣的功能的Javascript對象:

function MyClass { 

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

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

     // 1   2 
     this.Method1(this); 

    }); 
    } 

} 

哪個對象是各THIS指什麼? jQuery指的是從each迭代返回的項目。不過,我想This[1]指的是包含類...

我如何從jQuery循環中引用包含類?

回答

20

我想你可以做這樣的事情:

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

    Method2 = function() { 
      var containingClass = this; 
      $(".SomeClass").each(function() { 
      containingClass.Method1(this); 
      }); 
     } 
    } 
} 
+1

請使用var關鍵字將containsClass變量作用於該函數。如果你不這樣做,它會進入全局命名空間。 – tvanfosson 2009-06-11 12:41:51

+3

-1 JavaScript 101:使用var !!!!! – James 2009-06-11 12:48:10

+1

在ContainingClass賦值上拋出一個var,並且這是金點..以及對我的發佈代碼的簡單修改。 – 2009-06-11 12:50:31

9

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

這意味着,每一次執行 傳入的函數( 是一次每個元素匹配) 「this」關鍵字指向特定的 DOM元素。請注意,'this'不是 指向一個jQuery對象。

個人而言,我更喜歡使用顯式參數。通過這種方式,它更容易閱讀:

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

要回答你的問題:JavaScript有 動態 靜態範圍。你可以做到以下幾點:

var that = this; 
$('#rotfl').each(function(index, domObject) 
{ 
    var jQueryObject = $(domObject); 
    that.DoSomething(); 
    // code 
}); 
4

你看到的是不使用jQuery或其each()方法的問題 - 這是一些人認爲是在JavaScript設計錯誤 - 一個嵌套函數應「繼承」前一範圍的範圍內,所以「這個」在嵌套函數應(使用apply()call())處於它的父範圍等於「這個」,除非從不同的上下文內有目的地調用。

爲了解決這個問題,您需要在嵌套函數之前爲變量指定'this',以便您有另一種方法來引用它。