2015-11-20 14 views
6

Nie mogę dowiedzieć się, jak użyć metody konstruktora JavaScript w metodzie jQuery .click. Próbuję uzyskać funkcję przycisku, aby zmieniać się dynamicznie w zależności od konstruktora. Oto konfiguracja:Jak korzystać z metod konstruktora JavaScript w instrukcji jQuery?

musi wywołać metodę, która zmienia się w zależności od innego przycisku. Poniżej mój złamany kod.

function GloveMode (name , array) { 

     this.colorArray = array; 

     this.displaySettings = function(){ 

      //Title 
      $("#displayTitle").text(this.name); 
      //Display Color Set 
      $("#displayColors").empty(); 


      //Totally Broken 
      $("#upArrow").click(function(){ 

       addColor(); 

      }); 

     }; 

     this.addColor = function(){ 

      console.log(this.colorArray.length); 

     }; 
    }; 

nie mogę dowiedzieć się, jak dostać $ („#”) UpArrow kliknij() zadzwonić this.colorArray prawidłowo, lub jak nazywają this.addColor() w metodzie .click()! Proszę pomóż.

+1

var self = this; self.addColor() {...} – Enjoyted

+0

To tutaj bierze udział prototypowy aspekt JavaScript. Teoretycznie, chcesz, aby 'GloveMode' była encją zawierającą właściwości i metody dostępu do tych właściwości (jeśli dotyczy). Nie powinien jednak zawierać globalnych programów do obsługi kliknięć. Na przykład, jeśli chcesz, aby moduł obsługi kliknięcia miał dostęp do twojej własności nazwy, używałbyś 'GloveMode.name', aby uzyskać dostęp do właściwości i zwrócić ją do obsługi kliknięcia. – War10ck

Odpowiedz

4

Twój problem polega na tym, że "to" oznacza coś innego w każdym ciele funkcji. Więc zapisz pożądane "to" do zmiennej, np. "self" i użyj tego.

function GloveMode (name , array) 
{ 
    var self = this; 
    this.colorArray = array; 
    this.displaySettings = function() 
    { 
     //Title 
     $("#displayTitle").text(this.name); 
     //Display Color Set 

     $("#displayColors").empty(); 

     //Totally Broken 
     $("#upArrow").click(function() 
     { 
     self.addColor(); 
     }); 

    }; 

    this.addColor = function() 
    { 
     console.log(self.colorArray.length); 
    }; 
}; 
+0

Dziękuję. Nie rozumiem, dlaczego zmienna oznaczająca "to" musi być tutaj użyta, czy ktoś wie dlaczego? –

+0

Ponieważ zdefiniowano funkcję reprezentowaną przez zmienną składową "this.addColor" bez nazwy (deklaracja funkcji anonimowej). Więc możesz odwoływać się do tej funkcji tylko przez zmienną składową 'this.addColor'. Gdybyś nadał tej funkcji nazwę, taką jak "function addClass() ...", byłbyś w stanie uzyskać do niej dostęp tak, jak to zrobiłeś w swoim przykładzie kodu. –

Powiązane problemy