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