Name in Object-Literal durch Variable ersetzen
snoot
- javascript
Hi,
es gibt ja diese Kurzschreibweise für Objekte, sog. Object-Literale.
Kann man denn in diesem Beispielcode den Namen eigenschaft durch eine Variable ersetzen? Für "wert" geht das natürlich, weil es ein String ist, da kann ich einfach einen Variablennamen einsetzen. Aber eigenschaft ist ja kein String; wenn ich da meinen Variablennamen einfüngen würde, wäre diese ja wieder nur der feste Name für das Objekt.
var Container = {
eigenschaft : "wert", // statt eigenschaft soll eine Variable als Name genutzt werden
methode : function () {
alert("Container-Eigenschaft: " + this.eigenschaft);
}
};
Container.methode();
Liebe(r) snoot,
in einem Objekt-Literal definierst Du ein Objekt. Da gibt es nix variables, denn das Objekt hat definierte Eigenschaften und Methoden. Die sind in Deinem Literal sozusagen "fix". Du kannst aber später dynamisch Eigenschaften hinzufügen:
function addProperty(o, n, v) {
o[n] = v;
return o;
}
function MyObj () {
this.eigenschaft = "wert";
this.methode = function () {
alert("Eigenschaft: " + this.eigenschaft);
};
}
var obj = new MyObj();
obj.methode();
obj = addProperty(obj, "neu", "unerwartet");
alert("Neu: " + obj.neu);
Ich bin in JS nicht so firm, sodass ich nicht weiß, ob man diese "addProperty"-Funktion wirklich braucht, oder ob sie im Sprachumfang nicht inzwischen nativ existiert (evt. unter anderem Namen). In diesem Zusammenhang ist molilys Artikel "Organisation von JavaScripten" sehr interessant, insbesondere die bind-Funktion.
Liebe Grüße,
Felix Riesterer.
[latex]Mae govannen![/latex]
Ich bin in JS nicht so firm, sodass ich nicht weiß, ob man diese "addProperty"-Funktion wirklich braucht,
Nein. Kann man genausogut direkt schreiben obj['neu'] = 'unerwartet';
bzw. var a = 'neu', b = 'unerwartet'; obj[a] = b;
reicht.
Eine "addProperty"-Funktion hätte nur den Sinn, den Code sprechender und einheitlicher zu machen.
Cü,
Kai
Okay, danke an alle. Ich werde mal schauen, wie ich das bei mir einbauen kann.
@@snoot:
nuqneH
var Container = {
eigenschaft : "wert", // statt eigenschaft soll eine Variable als Name genutzt werden
var Container = {};
Container["eigenschaft"] = "wert";
Statt des Strings "eigenschaft" darf dort auch eine Variable stehen:
var Container = {};
var variable = "eigenschaft";
Container[variable] = "wert";
methode : function () {
alert("Container-Eigenschaft: " + this.eigenschaft);
Die Methode müsste dann aber anders aussehen.
Qapla'