2013-09-25 20 views
5

Przepraszamy za mój angielski. Oto przykładowy kod:Jak uzyskać dostęp do właściwości obiektu wewnątrz funkcji zdarzenia jQuery

/** 
* @constructor 
*/ 
function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 

    this.init = function(){ 
    $('body').append(this.$my_new_button); 
    this.$my_new_button.click(
     function(){ 
     // Its always alerts "undefined" 
     alert(this.my_value); 
     } 
    ) 
    } 
} 

Jak mogę uzyskać dostęp do obiektów my_value własność wewnątrz funkcji jQuery kliknij zdarzeń? Czy to możliwe?

Odpowiedz

6

można wykonać następujące czynności

function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 
    var self = this; //add in a reference to this 
    this.init = function(){ 
     $('body').append(this.$my_new_button); 
     this.$my_new_button.click(
      function(){ 
       //This will now alert 5. 
       alert(self.my_value); 
      } 
     ); 
    }; 
} 

Jest to mały wzór w javascript (chociaż nazwa wymyka mi). Umożliwia dostęp do członków najwyższego poziomu funkcji wewnątrz funkcji wewnętrznej. W funkcji zagnieżdżonej nie możesz użyć słowa "to", aby odnieść się do członków najwyższego poziomu, ponieważ odnosi się to tylko do funkcji, w której się znajdujesz. stąd potrzeba zadeklarowania funkcji najwyższego poziomu "tej" wartości do jej własnej zmiennej (nazywanej w tym przypadku self).

4

jQuery sposób, że jQuery.proxy(function, context):

function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 

    this.init = function(){ 
    $('body').append(this.$my_new_button); 
    this.$my_new_button.click(
     $.proxy(function(){ 
     // Its always alerts "undefined" 
     alert(this.my_value); 
     },this) 
    ) 
    } 
} 

DEMO

Powiązane problemy