Can: this und prototype

Hallo Leute,

in Javascript kann man Objekten mit Hilfe von prototype Methoden zuweisen, die dann ALLE Objekte dieses Typs besitzen.

Mir ist der Unterschied zu this nicht klar. Schaut:

			var obj1 = function(){ }  
  
			obj1.prototype.vorstellen = function(){ console.log("Hallo ich bin obj1"); }  
  
			var obj2 = function(){  
					this.vorstellen = function(){  
					console.log("Hallo ich bin Obj2");  
			  }  
			}  
  
			  
			var o1 = new obj1();  
			var o2 = new obj2();  
			o1.vorstellen();  
			o2.vorstellen();

Gibt es da Speicherplatz Unterschiede, oder gibt es überhaupt unterschiede?

Danke im voraus.

  1. Der Unterschied zw. einer Methodenzuweisung über den Konstruktor und einer über den Prototyp ist, dass eine Methode im Konstruktor jedesmal beim Anlegen einer Instanz dieser zugewiesen wird und beim Prototyp diese Funktion einmalig dem prototype-Objekt zugewiesen wird. Alle Eigenschaften des Prototypen werden in den Scope des Objektes eingeblendet.

    1. Der Unterschied zw. einer Methodenzuweisung über den Konstruktor und einer über den Prototyp ist, dass eine Methode im Konstruktor jedesmal beim Anlegen einer Instanz dieser zugewiesen wird und beim Prototyp diese Funktion einmalig dem prototype-Objekt zugewiesen wird. Alle Eigenschaften des Prototypen werden in den Scope des Objektes eingeblendet.

      Hallo!
      Danke für die Antwort.

      Hat das bestimmte Nachteile, oder Vorteile?

      1. Hat das bestimmte Nachteile, oder Vorteile?

        Speicherplatz und Laufzeit könnte man jetzt nennen, meiner Meinung nach kann man diese Vorteile der Zuweisung über prototype-Eigenschaften aber Vernachlässigen. Zudem sparst du die Laufzeit zwar beim Anlegen ein, hast aber bei jedem Zugriff auf eine solche Eigenschaft eine leichte Laufzeiteinbusse, weil der prototyp mit durchsucht werden muss.
        Beachten sollte man allerdings den Zugriff auf Referenzen beim Zugriff auf gemeinsamm genutzte Eigenschaften wird diese zwar bei Änderung an die jeweilige Instanz kopiert, allerdings ist es nur eine Referenz.
        Als einen Vorteil könnte man sehen, dass bei Zuweisungen über den Prototyp auch bereits bestehende Objekte diese Eigenschaften bekommen.

          
        function aaa()  
        {  
          this.xxx = [0];  
        }  
          
        aaa.prototype.yyy = [0];  
        aaa.prototype.test = function()  
        {  
          alert(this.xxx + " - " + this.yyy);  
        };  
          
        var a = new aaa();  
        var b = new aaa();  
        a.test();  
        b.test();  
        ++a.xxx[0];  
        a.test();  
        b.test();  
        ++a.yyy[0];  
        a.test();  
        b.test();  
        
        
      2. Hat das bestimmte Nachteile, oder Vorteile?

        Der immense Vorteil den prototype mit sich bringt, ist der, dass du "Klassen" erweitern kannst, die du nicht selbst erstellt hast. z.B. Arrays.

        MfG
        bubble