Mehrere Instanzen eines Prototypen

Dj Mike

Mitglied
Hallo,

ich habe folgendes Script. Ich denke mal, dass es sich dabei um so eine art Prototyp handelt, ich weiß allerdings nicht, wie ich jetzt mehrere Objekte der 'Klasse' anlegen kann. Geht das und wenn ja, wie?

Code:
var test = {
    _menus : new Array,
    _attachedElement : null,
    _menuElement : null,
    _preventDefault : true,
    _preventForms : true,

    attach : function (classNames, menuId) {
        ...
    },

    _getMenuElementId : function (e) {
        ...
    }
}
Anwenden kann ich es so, allerdings halt nur für ein Objekt:
Code:
 test.attach('title', 'cm_title');
 
Naja genau genommen ist das was Du da hast schon ein Objekt genauer genommen in der JSON (Javascript Objekt Notation Schreibweise). Davon kannst nie eine Instanz bilden.

Stell dir diese JSON schreibweise die Du verwendest wie so ein Assoziatives Array vor.

...
Schlüssel:Wert,
Schlüssel:Wert...

Auf diese Schlüssel kannst mit der Punkt Notation zugreifen. Im Gegensatz zu Arrays muss der Schlüssel nicht numerisch sein , sondern man kann auch einen String benutzen wie aktex1234.

Code:
function Auto () {
     function tanken () {
         return  "voll ist die Karre";
    }

     this.tanken = tanken;
};

var objekt = {
   name:"Fips",
   alter:29,
   hobbys:new Array("Fußball","schwimmen","eh alles gelogen"),
   auto:new Auto()
};

alert(objekt.name);
alert(objekt.auto.tanken());
alert(objekt.hobbys[0]);

Der zweite Weg ein objekt zu erstellen wäre folgender.

Code:
var objekt = new Objekt();
objekt['name'] = "Fips";
objekt['alter'] = 29;
...

Wie man im ersten Beispiel gesehen hat bildet man von Funktionen Instanzen.

Code:
function Fahrzeug () {

   function tanken () {
     return "mach die Karre voll";
   }

   // hier landen wir zum Beispiel bei einen Event und sind somit innerhalb des Event Objektes
   function event (e) {
       // wir sind hier im Event Objekt this.tanken würde er nicht finden 
       // aber tanken() schon.
   }

  /*
   * ich speicher den Namen der Funktion lieber in öffentlichen Variablen ab 
   * somit haben wir später zugriff von aussen auf die Funktion und bei Events 
   * oder Callback Handlern ersparen wir uns das gefummel um wieder an die Funktion zu
   * kommen siehe funktion event
   */ 
  this.tanken = tanken;
}

function Auto (marke) {
     var m = marke;

     function getMarke () {
        return m;
     }
  
     this.getMarke();
}
Auto.prototype = new Fahrzeug(); 

var fahrzeug1 = new Fahrzeug();
var fahrzeug2 = new Auto("Skoda");
var fahrzeug3 = new Auto("Porsche");

alert(fahrzeug1.tanken());
alert(fahrzeug2.getMarke());
alert(fahrzeug3.tanken());

Somit würde man zum Beispiel Instanzen von Objekten bilden und mit Prototype kann man dann auch bestehende Klassen erweitern.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück