2011-01-14 18 views
0

ich eine javasctipc Klasse haben ... nennen wir es X.Problem mit OOP Javascript

myClass = new X(bunc, of, stuff); 

Dann Methode ich habe wie:

X.prototype.drawTripOnMap = function(request) { 
    ... 
    var y = new ChartClass(); 
    //or this.chart = new ChartClass(): 
    y.drawchart(data, options, etc); 
    ... 
} 

ich will jetzt nicht neue Instanz von X erstellen - Wie kann ich innerhalb der ChartClass.drawchart-Methode myClass-Methoden aufrufen?

um Ihnen ein bisschen mehr Informationen über mein Problem zu geben - ich schreibe pure JavaScript-Klasse, die Haufen von OpenLayer Zeug behandelt. Meine Website verwendet prototype.js atm, aber wir wollen das loswerden. Wir können es nicht sofort machen, also versuche ich meine Klasse zu schreiben, so dass ich leicht Teile austauschen kann, die dom, Events oder Ajax-Aufrufe behandeln. Im Moment sind Drawin Diagramme unterhalb der Map und ich muss mit Chart Click Events umgehen. Wenn ich auf ein Diagramm klicke, muss etwas auf der Karte geschehen ... umgekehrt ist das einfach - da chart eine Unterklasse von myClass sein kann (this.chart im obigen Code).

soo ... wie?

Alan

+0

Wie würden Sie es in einer anderen OO-Sprache machen? – Pointy

+0

Hmmyeah ... ich fing an darüber nachzudenken ... und kam dann zur Lösung Ich brauche es überhaupt nicht zu tun: P danke an alle, die geantwortet haben :) –

Antwort

2

Übergeben Sie die Übergabe von instanceof X "class" an den ChartClass-Konstruktor.

var y = new ChartClass(this); 

Nachdem Sie den Verweis auf diese weitergegeben (es ist Ihr myClass Objekt) gespeichert Sie können von ihren Methoden aufrufen später innerhalb ChartClass.

0

So wie du es jetzt geschrieben hast, myClass ist ein weltweit (da es keinen var), so dass Sie tun können, nur

myClass.someMethod

Dies ist nur eine Vermutung. Ich kann mehr Hilfe anbieten, aber ich bin mir nicht sicher, was das Problem wirklich ist. Vielleicht hilft mir Ihre Antwort darauf, eine bessere Antwort zu geben.

1

Sie können direkt Prototyp Methoden aufrufen, ohne eine Instanz erforderlich ist, und den Umfang festlegen, mit:

X.prototype.drawTripOnMap.apply(null, [request]); 

Aber ich würde fragen, warum Sie eine Klassenmethode haben, die nicht den Kontext eines instanziierten Objekts erfordern warum nicht einfach eine globale Funktion?