2013-07-16 17 views
6

I symulowane klasy w Java Script, Jest to kod jest tutaj:Jak przekazać zmienną przez odwołanie do obsługi zdarzeń w javascript?

function myclass() 
{ 
    this.count ; 

    this.init = function(){ 
     $("div.mybtn").click({n:this},function(e){ 
      e.data.n.count++; 
     }); 
    } 

    this.getCount = function(){ 
     alert(this.count); 
    } 
} 

Potem stworzył instancję tej klasy i wykonywany jest metoda init(), ale po kliknięciu na dowolnym elemencie div.mybtn, nie zwiększamy wartość this.count.
Wygląda na to, że obiekt this został przekazany do obsługi zdarzeń przez wartość, a nie przez odniesienie.
Jak mogę przekazać zmienną do obsługi zdarzenia przez odniesienie?
Dziękuję za pomoc

Odpowiedz

2

Javascript nie ma parametrów "przekaż referencje". Za to, co chcesz, należy użyć zmiennej Zamknięcie:

this.init = function(){ 
    var self = this; 
    $("div.mybtn").click(function(){ 
     self.count++; 
    }); 
} 
1

Możesz napisać funkcję bind i powiązać kontekst z procedurą obsługi zdarzeń.

Function.prototype.bind = function(){ 
    var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift(); 

    return function(){ 
     fn.apply(object, args.concat(Array.prototype.slice.call(arguments))); 
    } 
} 

function myclass() 
{ 
    this.count ; 

    this.clicked = function(){ 
     this.count++;  
    }; 

    this.init = function(){ 
     $("div.mybtn").click(this.clicked.bind(this)); 
    } 

    this.getCount = function(){ 
     alert(this.count); 
    } 
} 
4

Nie można zwiększyć undefined, trzeba od czegoś zacząć:

function myclass() { 
    this.count=0; // start counting at zero !!! 

    this.init = function(){ 
     $("div.mybtn").on('click', {n:this},function(e){ 
      e.data.n.count++; 
      e.data.n.getCount(); 
     }); 
    } 

    this.getCount = function(){ 
     console.log(this.count); 
    } 
} 

var c = new myclass(); 

c.init() 

DEMONSTRATION

+0

testowałem, jak również i prace w porządku. – adeneo

Powiązane problemy