Wie rufe ich die Methode Go aus einem Ereignishandler auf?

function Test()
{
    this.yo = "YO";

    this.Go = function()
    {
       alert(this.yo);        
    }

    $(".aha").click(function()
    {
          //Call Go();        
    });
}

var test = new Test();

Geige: http://jsfiddle.net/BkNfY/9/

2
bergman 30 Nov. 2013 im 18:06

3 Antworten

Beste Antwort

Eine übliche Methode besteht darin, eine lokale Variable in Ihrem Konstruktor zu haben, die auf die Instanz verweist:

function Test()
{
    var self = this;

    this.yo = "YO";

    this.Go = function(){
       alert(this.yo);        
    }

    $(".aha").click(function(){
          self.Go();        
    });
}

Oder Sie können die Funktion, die Sie verwenden, binden Übergabe an .click():

    $(".aha").click(function(){
          this.Go();        
    }.bind(this));
3
nnnnnn 30 Nov. 2013 im 14:08

http://jsfiddle.net/BkNfY/12/

function Test(){
    var that = this;

    that.yo = "YO";

    that.go = function(){
       alert(that.yo);        
    }

    $(".aha").click(function(){
       that.go();        
    });

    return that;
}

var test = new Test();

Aber es wäre sinnvoller, es so zu machen: (wenn Sie Test wiederverwenden möchten)

function Test(){
    var that = this;

    that.yo = "default YO";

    that.go = function(){
       alert(yo);        
    }

    return that;
}

var test = new Test();
test.yo = "YO";

$(".aha").click(function(){
     test.go();        
});

Sie können Ihr "privat" halten, wenn es nicht außerhalb von Test verwendet wird, z. test.yo

function Test(){
    var that = this,
        yo = "YO"; // yo is now "private"
                   // so can't modify yo from outside of this function

    that.go = function(){
       alert(yo);        
    }

    return that;
}

var test = new Test();

$(".aha").click(function(){
     test.go();        
});
3
sanchez 30 Nov. 2013 im 14:55