molily: Class.create() OO mit prototype

Beitrag lesen

Hallo,

var Schuh = Class.create();

Schuh.prototype = {
  initialize: function(element, opt){
    var defaults = {
      groesse : 40,
      farbe : "rot",
      zustand : "gut"
    }
}

  
Diese Defaults werden nirgendwo verfügbar sein, sie sind bloß lokale Variablen im Konstruktor. Das ist dir klar, oder? Man würde die Default-Werte von öffentlichen Eigenschaften wohl so setzen:  
  
~~~javascript
Schuh.prototype = {  
    initialize : function () {  
        ...  
    },  
    groesse : 40,  
    farbe : "rot",  
    zustand : "gut"  
};

Oder halt in initialize:

this.groesse = 40,  
this.farbe = "rot";  
this.zustand = "gut";

Klicke ich auf den Schuh-Link
wird ein neues Objekt Schuh erzeugt.
Diesem neuen Objekt will ich Werte mitgeben.
Das sollte so gehen:

function zeige_groesse(obj)

{
  opt = {
    groesse: 49
  }
  var Schuh = Class.create(obj, opt);

  
Da missverstehst du anscheinend etwas (oder ich kenne Prototype nicht gut genug).  
  
Class.create() definiert eine Klasse.  
Wenn du eine Instanz dieser Klasse erzeugen willst, machst du ganz normal  
var SchuhInstanz = new Schuh(obj, opt);  
  

>     ~~~javascript

// Übergebene Grösse in "opt" abfangen  

>     // Wie muss ich das lösen?  
>     // (opt.groesse == 49) alert("Sehr gross!");

Ja, im Prinzip.

opt = opt || {};  
if (opt.groesse == "irgendeine bestimmte Größe") {  
   // Mache irgendwas bestimmtes  
}

~~~javascript

// defaults mit opt verschmelzen

// wobei opt defaults überschreiben muss
    // Wie muss ich das lösen?
    // defaults = Object.extend(defaults, opt || {});

  
Ja, so könntest du alle Eigenschaften aus opt in defaults kopieren.  
  

> Am Schluss möchte ich sagen können:  
>   
>   alert(Schuh.groesse);  
  
\*Dafür\* musst du eben anders arbeiten. Dazu bringt dir dein defaults-Object alleine nichts, dafür brauchst du stinknormale öffentliche Eigenschaften. Deshalb würde ich dieses defaults-Object verwerfen:  
  
~~~javascript
var Schuh = Class.create();  
Schuh.prototype = {  
 initialize : function (opt) {  
  if (opt.groesse == "irgendeine bestimmte Größe") {  
   // Mache irgendwas bestimmtes  
  }  
  // Ansonsten kopiere einfach alle opt-Member in die Instanz (nicht der feine englische Stil, aber gut)  
  Object.extend(this, opt || {})  
 },  
 groesse : 40,  
 farbe : "rot",  
 zustand : "gut"  
};  
  
var opt = {  
 groesse: 49  
};  
var SchuhInstanz = new Schuh(opt);  
alert(SchuhInstanz.groesse);

Mathias

--
»No nations, no borders.«
SELFHTML Weblog