vordefinierte JavaScript-Objekte
martin hein
- javascript
guden tach,
ich stehe an einem problem grundsaetzlichewr natur. wie wir alle wissen gibt es in javascript einen objektorientierten ansatz. ich hab mal irgendwo gelesen, javascript sei 'objektbasiert'. javascript stellt einige fertige objekte zur verfuegung(forms, windows, layers usw). das aeussert sich, wenn man nach einem objekt 'fragt', sprich eine variable in der ein objekt steckt 'alertet' folgendermassen im alert steht: "[object Form]" oder "[object Window]" oder so etwas. In diesem ominoesen [object ...] stehen allerlei Infos. das wird einem dann klar, wenn man beispielsweise ein formular, dass innerhalb eines layers in einem popup mit einer funktion, die im frameset des hauptfensters definiert ist ueberpruefen will:
eigendlich muesste es dann in etwa folgendermassen klingen:
"parent.opener.formcheck(popupname.document.layername.formularname)"
das argument dieser funktion wird ziemlich lang, wie man sieht.
einfacher macht man es sich damit, mit 'this' all das zu beschreiben.
die im frameset liegende funktion kann auf mit dem was in 'this' steht alles moegliche anfangen. sie kann eigenschaften, methoden, unterobjekte darauf anwenden.
jetzt kommts!
wie kann sie (bzw ich) wenn ueberhaupt das objekt zerlegen?
sprich:
in
'[object Form]'
steht sozusagen
'popupname.document.layername.formularname'
und ich haette gerne
'[object Form]'
so auseinandergebaut
dass ich
'layername'
herausfinde.
vielen dank fuer deine geduld, dass alles ueberhaupt durchzulesen. vielen dank auch an deine fantasie, die dir ein bild davon macht, wovon ich hier rede und vor allem fuer deine antwort. an eine moeglichkeit, dass sich die problematik loesen laesst glaube ich selbst mittlerweile nicht mehr,
thanx,
m.
Ich verstehe nicht genau was Du meinst, ich weiss nur wie
ich ein Objekt erzeugen kann.
Function beispiel()
{
this.form
this.name
}
Durch die Funktion
wird ein Objekt erzeugt, welches Du dann
mit new form, new name ansprechen, füllen kannst.
Hi Wolfgang
Die Aussage ist nicht ganz richtig, da form und name in diesem Fall (undefinierte) Eigenschaften der Objektklasse beispiel sind.
Die Instanzierung würde so aussehen:
myBeispielobjekt = new beispiel()
Das Objekt hätte nun die undefinierten Eigenschaften myBeispielobjekt.form und myBeispielobjekt.name.
Zurück zur urprüngliche Frage von Martin.
Die Rückgabe des Textes "[object Form]" entspricht dem Rückgabewert der Methode ".toString", die jedes Objekt (eingebaut oder selberdefiniert) von der Primitivklasse "object" erbt.
Dieser String enthält nicht wirklich die von Dir gewünschten Informationen.
Das Objekt selber ist ein Formobjekt, dass keinen Verweis auf das übergeordnete Objekt enthält (ist mir jedenfalls nich bekannt).
Du kannst jedoch in einer kleinen Schleife die Forms-Auflistung der übergeordneten documente abfragen und mit dem this.name vergleichen.
Die sieht in etwa so aus:
for(i=0;i<popupname.document.layers.count;i++)
{
for(j=0;j<popupname.document.layers[i].forms.count;j++)
{
if(popupname.document.layers[i].forms[j].name == this.name)
{
// Treffer !
layername = popupname.document.layers[i].name;
// Dein Code...
}
}
}
Weitere Informationen in der Online-Doku zu Javascript:
Client-Side JavaScript Guide: http://developer.netscape.com/docs/manuals/js/client/jsguide/index.htm
Hier insbesondere die Kapitel 7 (Working with Objects) und 8 (Details of the Object Model).
Client-Side JavaScript Reference: http://developer.netscape.com/docs/manuals/js/client/jsref/index.htm
Grüsse
Eisbär (aka Tom)
Hallo Eisbär,
Folgende Zeilen bitte nicht persönlich nehmen.
Du warst einfach schneller als ich und jetzt kriegst DU halt den Anschiss <G>.
myBeispielobjekt = new beispiel()
Was ist das ?
VBScript ? (sorry)
Wo ist das verdammte Semikolon ?!
Das Objekt hätte nun die undefinierten Eigenschaften myBeispielobjekt.form und myBeispielobjekt.name.
Was ist eine undefinierte Eigenschaft ? <g>
Eine Eigenschaft die nicht definiert ist ist keine Eigenschaft !
Das Objekt selber ist ein Formobjekt, dass keinen Verweis auf das übergeordnete Objekt enthält (ist mir jedenfalls nich bekannt).
Leider !
for(i=0;i<popupname.document.layers.count;i++)
{
for(j=0;j<popupname.document.layers[i].forms.count;j++)
{
if(popupname.document.layers[i].forms[j].name == this.name)
{
// Treffer !
layername = popupname.document.layers[i].name;
// Dein Code...
}
}
}
Bei Objektreferenzen ist eine Überprüfung auf einen Eigenschaftswert nicht sinnvoll, jedenfalls nicht wenn ich das Objekt suche.
zb:
popupname.document.layers[i].forms[j] == this
vorrausgesetzt "this" ist das gesuchte Formularobjekt.
Was m. benötigt ist eigentlich eine Suchfunktion, welches den Layer ermittelt, der das Formularobjekt (Funktionsparameter) enthält.
<example>
function findLayerOfForm( formObj ) //- return layer or null
{
var i = 0;
var layerObj;
while (i < popupWinObj.document.layers.length) //-hard coding
{
layerObj = popupWinObj.document.layers[i++];
if (hasForm(layerObj, formObj)) //- search the form
return layerObj;
}
return null;
}
function hasForm( layerObj, formObj )
{
var i = layerObj.document.forms.length;
while (i < layerObj.document.forms.length)
{
if (layerObj.document.forms[i++] == formObj) //- compare by referenz
return true;
}
return false;
}
functio checkForm( formObj )
{
...
var layer = findLayerOfForm( formObj );
...
}
</example>
Aber mal erlich, wer möchte einen Layer ?
So, das mußte ich jetzt mal loswerden <g>.
cu
stw
Hi stw
Hallo Eisbär,
Folgende Zeilen bitte nicht persönlich nehmen.
Du warst einfach schneller als ich und jetzt kriegst DU halt den Anschiss <G>.
myBeispielobjekt = new beispiel()
Was ist das ?
VBScript ? (sorry)
Wo ist das verdammte Semikolon ?!
Stimmt ;-) Ich habe letzte Woche tatsächlich nur ASP (mit VB) programmiert.
Da kommt leider immer etwas durcheinander. In der VB-Umgebung baue ich immer JS-typische Fehler ein und in der JS-Umgebung halt genau umgekehrt.
Mein Beispielcode war auch ungetestet und frei aus dem Kopf :-((
Grüsse
Eisbär
Hallo Eisbär,
myBeispielobjekt = new beispiel()
Was ist das ?
VBScript ? (sorry)
Wo ist das verdammte Semikolon ?!
Stimmt ;-) Ich habe letzte Woche tatsächlich nur ASP (mit VB) programmiert.
Da kommt leider immer etwas durcheinander. In der VB-Umgebung baue ich immer JS-typische Fehler ein und in der JS-Umgebung halt genau umgekehrt.
<g>
Und darum meide ich das VBScripting wie der Teufel das Weiwasser.
Aber ich kenne das Problem, zumindest von meinen Kollegen, die Scheiß ich dann immer zusammen (natürlich spaßig gemeint).
Mein Beispielcode war auch ungetestet und frei aus dem Kopf :-((
Meiner auch <g>, ich brauchte halt nur länger aber es gibt für online-Konversationen und Hilfestellungen keine Garantie auf Richtigkeit und Perfektion. Die erwartet auch keiner. Das hoffe ich zumindest, sonst sehe ich alt aus. <G>
re gruß
stw