molily: Frage zu eval()

Beitrag lesen

Hallo,

Wenn ich eine funktion abc() habe und dann alert(abc) ausführe, kriege ich den Code der Funktion augegeben. Wenn ich andere Objekte ausgebe, bekomme ich meist "[Object]" geliefert. Liege ich da richtig, das es sich beim Ausgeben des Funktionscodes um den Prototyp/(sozusagen eine "Klasse") handelt und sonst um eine Objektinstanz? Diese Frage wäre mir sehr wichtig, weißt Du eine Antwort?

Die Frage verstehe ich nicht. Weder noch, würde ich antworten.

Beim »Ausgeben« wird ein Objekt zuerst über die Methode toString() in einen String umgewandelt. Funktionsobjekte werden eben so in einen String umgewandelt: »function ([Parameter]) { [Funktionskörper] }« (Also syntaktisch wieder eine Function-Expression.) Das ist eine Sonderregel für Funktionsobjekte - andere Objekte haben eigene toString-Methoden. »[object Object]« kommt z.B. bei ganz allgemeinen Objekten heraus.

Mit Prototypen und Instanzen hat das erstmal nichts zu tun (wobei natürlich die Methode toString des Function-Prototyps die des Über-Prototyps Object überschreibt.)

Also ist ein Methodenaufruf kein "atomares" Element der Programmlogik (wenn man mal von den einzelnen Buchstaben absieht)

Richtig.

sondern er besteht aus einer Variable (in diesem Fall "abc") die ein (prototypisches?) Funktionsobjekt (genauer eine Referenz auf ein Funktionsobjekt) enthält.

Ja, ein Funktionsaufruf ist auch nur ein Ausdruck: ein Identifier wird mit einem Call-Operator zusammengebracht. Daraus folgt, dass man den Identifier auch ohne diesen Operator benutzen kann, um auf das Funktionsobjekt zugreifen zu können.

Wie du hier wieder auf Prototypen kommst, verstehe ich nicht.

Außerdem einem nachgeordneten Operator "()", der bewerkstelligt, das das Funktionsobjekt/(der Quellcode), auf das die vorangestellte Variable zeigt, ausgeführt wird.

Genau.

Ich habe bisher immer zwischen Eigenschaften und Methoden unterschieden. Wenn es so ist, dann gibt es nur Eigenschaften.

Das ist korrekt. Funktionen/Methoden sind Eigenschaften wie alle anderen auch, sie haben nur einen bestimmten Typ.

"Beachten Sie, dass hier nur der Funktionsname stehen darf, kein Funktionsaufruf mit runden Klammern dahinter."

Das befriedigt mich _ganz und gar_ nicht. ;-)

Die Sicht, dass Funktionen auch nur Objekte wie alle anderen auch sind, ist in SELFHTML nicht beachtet, das stimmt.

Mathias