David: Konstruktor

Hallo,

ich würde gerne wissen ob man in Javascript auch einen Konstruktor schreiben kann. Man ruft also z. B. das Objekt auf.

a = new MyObj(param);

Und nun soll es in MyObj einen Konstruktor geben, der den Wert von param entgegennimmt, verarbeitet und dementsprechent handalt. Sagen, wir param ist true, dann soll eine Funktion "init" ausgeführt werden, ist der Wert false, dann soll diese Funktion nicht ausgeführt werden.
Lässt sich das irgendwie machen?

Liebe Grüße,
David

  1. function Init(o)
    {
      ...
    }

    function MyObj(param)
    {
      if (param)
        Init(this);
    }

    a = new MyObj(true);

    MfG
    GK

    1. function Init(o)
      {
        ...
      }

      function MyObj(param)
      {
        if (param)
          Init(this);
      }

      a = new MyObj(true);

      Das wäre schön wenn es so einfach wäre *schnüff*
      Ich würde gerne alles in einem Objekt haben und folgesndes funktioniert leider nicht, ich weiß auch nicht warum:

      function MyObj(param)
      {
        if (param)
          Init(this);

      this.Init = function ()
        {
          ...
        }
      }

      a = new MyObj(true);

      1. Der Code ist nur schnell dahingeschrieben, aber egal wie ichs this setze oder weglasse, es kommt immer der Fehler
        this.Init is not a function

      2. function MyObj(param)
        {
          this.Init = function ()
          {
            ...
          }

        if (param)
            this.Init();
        }

        a = new MyObj(true);

        Wie soll der denn Init kennen, wenn Du es erst nach dem Aufruf zuweist? In JS sind ist sowas wie this.Init = function... eine Anweisung keine Deklaration! Ausserdem wird Init in diesem Fall zu einer Methode und muss über this.Init() aufgerufen werden, nicht über Init(this).

        MfG
        GK

  2. Hallo David.

    Hallo,

    ich würde gerne wissen ob man in Javascript auch einen Konstruktor schreiben kann. Man ruft also z. B. das Objekt auf.

    a = new MyObj(param);

    Und nun soll es in MyObj einen Konstruktor geben, der den Wert von param entgegennimmt, verarbeitet und dementsprechent handalt. Sagen, wir param ist true, dann soll eine Funktion "init" ausgeführt werden, ist der Wert false, dann soll diese Funktion nicht ausgeführt werden.
    Lässt sich das irgendwie machen?

    Der Parameter ist an sich überflüssig. Einen „Konstruktor“ gibt es in JS-„Klassen“ nicht, aber du kannst einfach direkt in der Klassendefinition den auszuführenden Code notieren. Wird dann ein Objekt erzeugt, wird der Code ausgeführt:

    function Foo() {  
      
      this.bar = "BAR";  
      
      alert(this.bar);  
    }  
      
    var f = new Foo; // „BAR“ wird ausgegeben
    

    Einen schönen Mittwoch noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Der Parameter ist an sich überflüssig. Einen „Konstruktor“ gibt es in JS-„Klassen“ nicht, aber du kannst einfach direkt in der Klassendefinition den auszuführenden Code notieren. Wird dann ein Objekt erzeugt, wird der Code ausgeführt:

      function Foo() {

      this.bar = "BAR";

      alert(this.bar);
      }

      var f = new Foo; // „BAR“ wird ausgegeben

        
      Ich würde gern eine Methode ausführen, aber ich kann irgendwie nicht folgenden Code nutzen:  
        
      ~~~javascript
      function MyObj(param)  
      {  
        if (param)  
          Init(this);  
        
        this.Init = function ()  
        {  
          ...  
        }  
      }
      
      1. Hallo David.

        Ich würde gern eine Methode ausführen, aber ich kann irgendwie nicht folgenden Code nutzen:

        function MyObj(param)

        {
          if (param)
            Init(this);

        this.Init = function ()
          {
            ...
          }
        }

          
        Öhm, die Reihenfolge ist durchaus von Bedeutung. Du kannst this.Init() (so müsste der Aufruf neben bei eigentlich aussehen) nicht ausführen, so lange es noch gar nicht existiert.  
          
          
        Einen schönen Mittwoch noch.  
          
        Gruß, Mathias  
        
        -- 
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)  
          
        debian/rules
        
    2. gruss Mathias,

      Der Parameter ist an sich überflüssig.

      warum, Du weisst doch noch gar nicht, was der OP bewrkstelligt haben moechte.
         [RegExp]-objekte beispielsweise koennen initial nicht nur ueber die literal-
         schreibweise sondern auch ueber ein string-argument des konstruktors erzeugt
         werden - darueber hinaus lassen sich schon existierende [RegExp]-objekte
         ueber wiederum ein string-argument der methode [compile] reinitialisieren.

      Einen „Konstruktor“ gibt es in JS-„Klassen“ nicht,

      wie bitte? JavaScript bietet wirklich die vielfaeltigsten moeglichkeiten
         erzeugermuster fuer massgeschneiderte objekte umzusetzen; das fuer diese
         sprache jedoch typische vererbungskonzept, alle erdenklichen eigenschaften,
         sinnvollerweise aber doch eher methoden, ueber das [prototype]-objekt zu
         referenzieren und diese im kontext des aufrufenden objekts auszufuehren,
         laesst sich hingegen ausschliesslich mit konstruktorfunktionen realisieren
         - kurz: prototypische vererbung erfolgt ueber den konstruktor eines objekts.

      hallo auch David,

      ich würde gerne wissen ob man in Javascript auch einen Konstruktor
      schreiben kann. Man ruft also z. B. das Objekt auf.

      a = new MyObj(param);

      Und nun soll es in MyObj einen Konstruktor geben, der den Wert von
      param entgegennimmt, verarbeitet und dementsprechent handalt. Sagen,
      wir param ist true, dann soll eine Funktion "init" ausgeführt werden,
      ist der Wert false, dann soll diese Funktion nicht ausgeführt werden.
      Lässt sich das irgendwie machen?

      ein moeglicher ansatz koennte folgendermassen aussehen:

      ~~~javascript var SomeObject = function (param) {

      //falls [[SomeObject]] selbst ein objekt als [prototype]n referenziert:
           this.constructor = arguments.callee;

      if (param) { // bedarf einer etwas genaueren pruefung!

      //this.initialize.call(this, param); // oder universeller:
             this.initialize.apply(this, arguments);
           }
         };
         SomeObject.prototype.initialize = function (/param/) { /* damit liesse
           sich der konstruktorkram immerhin fuer alle oeffentlichen - bindung an
           [this] - eigenschaften auslagern */

      this.someProperty = arguments[0];
         };

        
        
        
        
        
         so long - peterS. - pseliger@gmx.net  
        
        
      
      -- 
      »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.  
      Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - [Douglas Crockford](http://javascript.crockford.com/)  
        
      ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]