Christian S.: statische public JavaScript Variablen

Hi,

gibt es eine einfachere Möglichkeit statische öffentliche JavaScript Variablen zu beschreiben??

Bisher mache ich es so:

function MyClass()
{
   MyClass.StaticVariable = 0;
}

oder so:

function MyClass()
{

}
MyClass.StaticVariable = 0;

was mich nun sehr stört, ist das wenn ich mal den Funktionsnamen (hier die Klasse) ändere, dass ich dann das auch bei allen statischen Variablen machen muss.

Kann man auch einfacher statische Variablen angeben? ohne immer noch den Funktions/Klassennamen davor zu schreiben? (etwa so wie "this" bei nicht-statischen Membern).

Gruß
Christian

  1. Hallo,

    Kann man auch einfacher statische Variablen angeben? ohne immer noch den Funktions/Klassennamen davor zu schreiben? (etwa so wie "this" bei nicht-statischen Membern).

    Du kannst über die Instanz-Eigenschaft constructor auf die Konstruktorfunktion zugreifen:

    function Konstruktor () {  
       // Im Kontruktor sind drei Ansprechweisen möglich:  
       alert(  
          (Konstruktor === this.constructor) + "\n" +  
          (Konstruktor === arguments.callee)  
       ); // Die liefern alle dasselbe Funktionsobjekt.  
      
       // Nehmen wir mal this.constructor  
       this.constructor.staticVariable = "bla";  
      
       // In einer Methode funktioniert this.constructor auch  
       this.func = function () {  
          alert(this.constructor.staticVariable);  
       };  
    }  
    var instanz = new Konstruktor();  
    instanz.func();;
    

    Mathias

    1. hallo Christian S., gruss molily,

      Du kannst über die Instanz-Eigenschaft constructor auf die Konstruktorfunktion zugreifen:

      function Konstruktor () {

      // Im Kontruktor sind drei Ansprechweisen möglich:
         alert(
            (Konstruktor === this.constructor) + "\n" +
            (Konstruktor === arguments.callee)
         ); // Die liefern alle dasselbe Funktionsobjekt.

      // Nehmen wir mal this.constructor
         this.constructor.staticVariable = "bla";

      /*
            wobei darauf zu achten ist, [this.constructor] ausdruecklich
            zu setzen, wenn man fuer seine objekte erreichen moechte, dass
            [this.constructor] auch immer [arguments.callee] ist ...
          /
            this.constructor = arguments.callee;
          /

            .., denn konstruktoren, die eueber ihren [prototype]n
            andere konstruktoren referenzieren, geben genau eine
            solche referenz als angeblich eigenen konstruktor aus.
          */

      // In einer Methode funktioniert this.constructor auch
         this.func = function () {
            alert(this.constructor.staticVariable);
         };
      }
      var instanz = new Konstruktor();
      instanz.func();

        
        
         und hier noch mal ein beispiel, um das oben gesagte zu demonstrieren:  
        
        
         ~~~javascript
      var Collection = function () {  
        
           alert("[collection].constructor : " + this.constructor + " === Collection? " + (this.constructor === Collection));  
        
           this.constructor = arguments.callee; // needs to be set explicitly in order to break prototype chain.  
        
           alert("[collection].constructor : " + this.constructor + " === Collection? " + (this.constructor === Collection));  
         };  
         Collection.prototype = new Array();  
        
         var myColl = new Collection();
      

      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
      ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]