Konstruktur, Klassenvariabeln?

wachteldonk

Erfahrenes Mitglied
ich habe folgende Klasse

Code:
var Arbeitszeiten = {

  getStartEntrylist: function() {
	var vars = "";

  },
  getEntrylist: function() {

  },

  setEntry: function(USERID,datum,nr) {
	var colors = Array();
	colors['leer']   = '#EEEEEE';
	colors['arbeit'] = '#00FF00';
	colors['urlaub'] = '#FFA500';
	colors['krank']  = '#FF0000';
	colors['frei']   = '#0000FF';
	this.alertEntry();
	},

	alertEntry: function() {
		alert("Ready");
	}
};


ich möchte das color array aber im Konstruktor setzten. Wie initialisiere und setze ich diese Variabel in JS und wie greif ich drarauf zu ?
 
Zum Ersten: beim Array hast du das "new" vergessen.
Zum 2: colors ist überhaupt kein Array :)

Es sei nochmal daran erinnert, dass es in JS keine assoziativen Arrays gibt....colors ist ebenfalls ein selbst kreiertes Objekt, daher musst du es auch wie ein solches initialisieren:

Code:
var Arbeitszeiten = {
  colors:
  {
	  leer  :'#EEEEEE',
	  arbeit:'#00FF00',
	  urlaub:'#FFA500',
	  krank :'#FF0000',
	  frei  :'#0000FF'
	},
	
  sagFarbe: function(k) 
  {
	  return(this.colors[k])
	}
};

//Test:
alert(Arbeitszeiten.colors['frei']);
alert(Arbeitszeiten.sagFarbe('urlaub'));
 
Vorweg sei gesagt es gibt verschiedene Möglichkeiten eine Klasse zu initialisieren.

Das was Du hast bezeichne ich immer gern als statische Klasse (wobei genau genommen es ein Object ist) , aber sie besitzt keinen Konstruktor und alle Methoden sind public.

Du kannst quasi jede Methode aufrufen ohne eine Instanz von der Klasse Arbeitszeiten zu bilden. Das soll auch heissen das jede Variable den du direkt im Object Arbeitszeiten definierst public ist und überall gleich ist.

Ich nehm gleich mal Sven Mintels Beispiel da raus nun ;)

Code:
 var Arbeitszeiten = {
  colors:
  {
	  leer  :'#EEEEEE',
	  arbeit:'#00FF00',
	  urlaub:'#FFA500',
	  krank :'#FF0000',
	  frei  :'#0000FF'
	},
	
  sagFarbe: function(k) 
  {
	  return(this.colors[k])
	}
};

//Test:
alert(Arbeitszeiten.colors['frei']);
alert(Arbeitszeiten.sagFarbe('urlaub'));

//Man kann zwar hier keine Instanz von Arbeitszeiten bilden aber direkt von den methoden
//ist in dem Beispiel zwar blöde sowas zu machen aber nun hättest direkt eine Instanz
// von sagFarbe in test abgespeichert und sagFarbe() ist der Konstruktor
// hier würde aber nun return this.colors[key] nicht mehr klappen man müsste nun schreiben
// return Arbeitszeiten.colors[key] , wirst eh machen müssen sofern die Funktion durch einen Callback 
// oder Event aufgerufen wird
var test = new Arbeitszeiten.sagFarbe();

eine 2. Variante mit Konstruktor ist es dann direkt in eine Funktion zu schreiben alles.

Code:
function Arbeitszeiten (colObj) {
    var colors = new Object(); // bzw var colors = {} kürzer
    var thisObj = this;

   colors = colObj;

    this.getStartEntrylist =  function() {
        var vars = "";
    }
  
    this.getEntrylist = function() {
    }

    this.setEntry =  function(USERID,datum,nr) {
        this.alertEntry();
    }
    
    this.alertEntry = function() {
        alert("Ready");
    }
    
    this.getColor = function (key) {
        return colors[key];
    }

    function ichBinPrivate () {}
}   
    
var az = new Arbeitszeiten({leer:'#EEEEEE',arbeit:'#00FF00',urlaub:'#FFA500',krank:'#FF0000',frei:'#0000FF'});
alert(az.getColor['urlaub']);
alert(az.getColor['krank']);

Arbeitszeiten ist die Klasse und zugleich der Konstruktor. Alle Methoden die mit this.Methoden Name bezeichnet werden sind öffentlich zugänglich aber ohne eine Instanz von der Klasse zu machen kommt man nicht ran.

Solltest nun versuchen az.ichBinPrivate() aufzurufen wird er Dir sagen das er diese Funktion nicht kennt. Diese Methode kannst nur innerhalb der Klasse (Funktion) Arbeitszeiten aufrufen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück