Peter: JavaScript Konstruktor in Literal Notation

Hallo,

ich habe eine Frage.
In JavaScript nutze ich die Literal Notation um Objekte zu definieren.

Hier ein Beispiel:

var TEST = {

myVar:null,
 myVar2:null,

getMyVar: function(){
  return this.myVar;
 },
 getMyVar2: function(){
  return this.myVar2;
 },

setMyVar: function(i){
  this.myVar = i;
 },

setMyVar2: function(i){
  this.myVar2 = i;
 }

}

Nun meine Frage, wie kann ich diesem Objekt einen Konstruktor geben?
Denn eigentlich würde ich gerne einen Aufruf wie diesen tätigen

var test1 = new TEST;

Da ich aber noch keinen Konstruktor definiert habe, meckert der Browser zu recht.

Ich wäre dankbar für jeden Hinweis.

Gruß
Peter

  1. Hi du,
    mhm du gibst auch nix zurück, weiß aber nicht ob es daran handelt genau.

    Schau dir mal DOMAssistant an. Im Basisobjekt ist es etwa so:

      
    var TEST = function() {  
        var myVar = null;  
        var myVar2 = null;  
        return {  
            allMethods : [],  
            publicMethods : [  
                "getMyVar",  
                "getMyVar2",  
                "setMyVar",  
                "setMyVar2"  
            ],  
      getMyVar: function(){  
       return this.myVar;  
      },  
      getMyVar2: function(){  
       return this.myVar2;  
      },  
      
      setMyVar: function(i){  
       this.myVar = i;  
      },  
      
      setMyVar2: function(i){  
       this.myVar2 = i;  
      }  
        };  
    };  
    
    
  2. Hi,

    Nun meine Frage, wie kann ich diesem Objekt einen Konstruktor geben?

    Du kannst dem Objekt keinen Konstruktor _geben_, sondern es muss einer _sein_. Rest siehe scorbios Antwort.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. Hallo,

    Nun meine Frage, wie kann ich diesem Objekt einen Konstruktor geben?

    Du hast da verschiedene Möglichkeiten:

    Du notierst eine Konstruktorfunktion, in der du dem Instanzobjekt this alle möglichen Eigenschaften und Methoden anhängst. Diesem Konstruktor kannst du auch Parameter übergeben, um damit die Eigenschaften zu füllen.

    function Konstruktor (param) {
       this.eigenschaft = param;
       this.methode = function () { ... };
       // usw.
    }
    var instanz = new Konstruktor("wert");
    instanz.methode();
    alert(instanz.eigenschaft);

    oder du kannst den ganzen Kram über den Prototypen anhängen. Dann kannst du die Schreibweise mit dem Object-Literal beibehalten:

    function Konstruktor (param) {
       this.eigenschaft = param; // wenn du die Eigenschaft an der Stelle setzen willst, ansonsten halt später durch einen Methodenaufruf
    }

    Konstruktor.prototype = {
       eigenschaft : "wert",
       methode : function () { ... }
    }

    var instanz = new Konstruktor("wert");
    instanz.methode();
    alert(instanz.eigenschaft);

    Mathias