T-Rex: objekt methode im konstruktor aufrufen?

Moin,

ich möchte gerne eine Klassen eigene Methode beim initialisieren eines Objektes aufrufen. Also so
---------------------
function classe()
{
    this.classe_funktion();
    this.classe_funktion = function()
    {
    }
}
var objekt = new classe();
---------------------

Bekomme jedoch ständig die Nachricht das es die Methode noch gar nicht gibt.

danke T-Rex

  1. Hallo T-Rex,

    versuch es mal anders herum: (Unter-)Funktion erst definieren und dann aufrufen.

    Gruß, Jürgen

  2. ich möchte gerne eine Klassen eigene Methode beim initialisieren eines Objektes aufrufen. Also so

    function classe()
    {
        this.classe_funktion();
        this.classe_funktion = function()
        {
        }
    }
    var objekt = new classe();

    Falls die Funktion keinen Zugriff auf private Variabeln oder Funktion haben muss, kannst die Memberfunktion auch als prototype Funktion deklarieren:

    classe.prototype.classe_funktion = function() {  
    /*... */  
    };  
    
    

    Bekomme jedoch ständig die Nachricht das es die Methode noch gar nicht gibt.

    und umgehst damit auch diesem Problem.

    Struppi.

  3. Hallo,

    this.classe_funktion();
        this.classe_funktion = function()
        {
        }

    Ein Programm wird von oben nach unten Anweisung für Anweisung abgearbeitet. Das ist nichts anderes als:

    alert(a);
    var a = "wert";

    Die Variable ist natürlich erst verfügbar, nachdem sie gesetzt wurde, deshalb wirft dieser Code einen Fehler.

    Es gibt nur eine Ausnahme: Funktionsdeklarationen. Man kann schreiben:

    bla();
    function bla () {}

    Aber man kann nicht schreiben:

    bla();
    var bla = function () {};

    (Obwohl das haargenau denselben Effekt hat!)

    Warum? Weil Expression Statements (in dem Fall mit Assigment Expressions) nacheinander ausgeführt werden.

    Mathias

    1. Hallo,

      this.classe_funktion();
          this.classe_funktion = function()
      Warum? Weil Expression Statements (in dem Fall mit Assigment Expressions) nacheinander ausgeführt werden.

      Mathias

      PFUI!!!!
      Das bedeutet, hätte ich function this.classe_funktion () geschrieben hätte es problemlos funktioniert?
      Ach naja was solls, das einfachste war einfach den Aufruf ans Ende zu setzen *gg*.

      Danke
      T-Rex

      1. Hallo,

        Das bedeutet, hätte ich function this.classe_funktion () geschrieben hätte es problemlos funktioniert?

        Nein, wenn du eine Funktion in this.bla speichern willst, kannst du keine Funktionsdeklaration, sondern musst einen Funktionsausdruck nehmen.
        function this.bla (...) {...} geht nicht, nur this.bla = function (...) {...};
        Und das ist eben eine Anweisung der Sorte, die nacheinander ausgeführt werden.

        Mathias