snoot: Name in Object-Literal durch Variable ersetzen

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();  

  1. Liebe(r) snoot,

    Object-Literale.

    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.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. [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

      --
      Deutsches Liedgut international:
      In early rope to mountain we pull
      Foren-Stylesheet Site Selfzeug JS-Lookup
      SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
    2. Okay, danke an alle. Ich werde mal schauen, wie ich das bei mir einbauen kann.

  2. @@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'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a