Frage zu OOP bei JS

stEEdZ

Mitglied
Hallo,
ich schlag mich hier gerade etwas mit der OOP von JS umher.
PHP:
function ClassA() {
}

ClassA.prototype.ClassB = function(){
}

var A = new ClassA();
A.ClassB();
Das funktioniert ohne Probleme! :)

Eigentlich müsste ich den Prototypen aber in der ClassA-Funktion bereits aufrufen.
Geht das überhaupt?
Hier nochmal zur Verdeutlichung:
PHP:
function ClassA() {
      if(irgendwas)
                  ClassA.prototype.ClassB.call(this); // ODER SO ÄHNLICH
}

ClassA.prototype.ClassB = function(){
}

var A = new ClassA();

Ginge sowas?
Vielen Dank für die Hilfe
steedz
 
Moin,

meinst du so?
Code:
function ClassA(name) 
{
  this.name=name;
  if(1)this.ClassB(); // ODER SO ÄHNLICH
}

ClassA.prototype.ClassB = function()
{
  alert("Methode ClassB von '"+this.name+"' am Start");
}

var A = new ClassA('Objektname');
 
Moin,
meinst du so?
...

Ja, super das geht! Komisch hatte ich auch probiert da gings nicht... :rolleyes:

Nächster Schritt wäre dann im Prototype nen weiteren Prototype aufzurufen. Wie ginge das dann?

PHP:
function ClassA(name) {
  this.name=name;
  this.ClassB(); // DAS FUNKTIONIERT GUT!! ;-)
}

ClassA.prototype.ClassB = function(){
 this.ClassC(); // ODER SO ÄHNLICH!
}

ClassA.prototype.ClassC = function(){
   alert("Methode ClassC von '"+this.name+"' am Start");
}
var A = new ClassA('Objektname');

Oder sollte dann ClassC ein Prototyp von ClassB sein? Oder geht beides?
Oder ist das sowieso komplett unpraktisch... :confused:
Danke für die Hilfe
steedz
 
Hi,

ja, so würde es funktionieren.

Die Referenz this bezieht sich innerhalb des Gültigkeitsbereichs eines Prototypen immer auf dessen "Eltern"-Objekt - in deinem Fall ClassA.

Der Aufruf
Code:
this.ClassC();
innerhalb des Prototypen ist also gültig, da das Objekt ClassA die Methode ClassC besitzt.

Ciao
Quaese
 
Das, was du da gepostet hast, funktioniert.

Aber um Missverständissen Vorzubeugen:

ClassB und ClassC sind keine Objekte, sondern Methoden der Objektinstanz von ClassA(also A)
 
Mal so eine Frage am Rande die mich nen bissel beschäftigt ;)

Ich benutze für die Vererbung sozusagen apply oder call , so gesehen ist es ja nix anderes als das Prototype , der Zeiger this wird eben nur gezwungen auf ein anderes Objekt zu zeigen.

Zum Beispiel

Code:
function A(){
   this.name = "klaus";
};

function B(){
    A.apply(this);
};

var b = new B();
alert(b.name);

Es gibt ja viele möglichkeiten mit dem OOP in JS ich habe mich für Variante call oder apply entschieden aber bin mir nu nicht so sicher ob es dadurch zu Problemen kommen kann oder es langsamer ist.

Der Vorteil den ich hier sehe ist das bei Prototype genau darauf zu achten ist das die Klasse die vererbt vor der Kindklasse eingebunden wird. Sonst findet das Kind ja seine Mutter nicht.
Bei Apply und Call , dies wird ja erst dann ausgeführt wenn ich die Funktion wirklich aufrufe.
 

Neue Beiträge

Zurück