class Object extends Any
Object ist die Basisklasse, von der sich andere AutoHotkey-Objektklassen ableiten. Jede Object-Instanz besteht aus einem Satz "eigener Eigenschaften" und einem Basisobjekt, von dem weitere Eigenschaften geerbt wurden. Objects haben auch Methoden, aber das sind eigentlich nur Eigenschaften, die aufgerufen werden können.
Es gibt Werteigenschaften und dynamische Eigenschaften. Werteigenschaften enthalten lediglich einen Wert. Dynamische Eigenschaften enthalten keinen Wert, sondern rufen je nach Zugriffsart (Get, Set oder Call) eine Akzessorfunktion auf.
"Obj" wird hier stellvertretend für eine beliebige Instanz der Object-Klasse verwendet.
Alle Object-Instanzen basieren auf Object.Prototype
, das wiederum auf Any.Prototype
basiert. Zusätzlich zu den von Any geerbten Methoden und Eigenschaften haben Objects die folgenden vordefinierten Methoden und Eigenschaften.
Erstellt ein neues Object.
Obj := Object()
Obj := Object.Call()
Gibt eine flache Kopie eines Objekts zurück.
Klon := Obj.Clone()
Jede Eigenschaft oder Methode des Objekts wird in den Klon kopiert. Objektreferenzen werden kopiert (wie bei einer normalen Zuweisung), nicht die Objekte selbst, d.h. wenn eine Eigenschaft eine Referenz enthält, die auf ein Objekt verweist, wird der Klon eine Referenz enthalten, die auf dasselbe Objekt verweist.
Dynamische Eigenschaften werden kopiert, nicht indirekt aufgerufen.
Der Klon hat dasselbe Basisobjekt wie das Originalobjekt.
Es wird ein TypeError ausgelöst, wenn Obj von einem nicht unterstützten internen Typ abgeleitet ist. Diese Implementierung von Clone unterstützt Object-, Class- und Error-Objekte. Siehe auch: Clone (Array), Clone (Map).
Definiert eine neue eigene Eigenschaft.
Obj := Obj.DefineProp(Name, Deskriptor)
Typ: Zeichenkette
Der Name der Eigenschaft.
Typ: Objekt
Ein Objekt mit einer der folgenden eigenen Eigenschaften, oder mit Get und Set:
Get: Ein Funktionsobjekt, das aufgerufen wird, wenn der Wert der Eigenschaft abgerufen wird.
Set: Ein Funktionsobjekt, das aufgerufen wird, wenn der Eigenschaft ein Wert zugewiesen wird. Der zweite Parameter ist der Wert, der zugewiesen wird.
Call: Ein Funktionsobjekt, das aufgerufen wird, wenn die Eigenschaft aufgerufen wird.
Value: Ein beliebiger Wert, der der Eigenschaft zugewiesen wird.
Typ: Objekt
Diese Methode gibt das Zielobjekt zurück.
Diese Methode kann verwendet werden, um eine Werteigenschaft in eine dynamische Eigenschaft umzuwandeln oder umgekehrt, aber es ist nicht möglich, sowohl einen Wert als auch Akzessorfunktionen anzugeben.
Wenn eine der Akzessorfunktionen weggelassen wird, wird das Verhalten von einem Basisobjekt geerbt.
this
. Beachten Sie, dass ein neuer Wert alle dynamischen Eigenschaften in this
selbst und alle geerbten Akzessorfunktionen überschreiben würde.Bei Methoden ist this
(das Zielobjekt) der erste Parameter von Get, Set oder Call. Bei Set ist value
der zweite Parameter (der Wert, der zugewiesen wird). Diese Parameter werden automatisch von Methoden- und Eigenschaftsdefinitionen innerhalb einer Klasse definiert, müssen aber bei der Verwendung von normalen Funktionen explizit definiert werden. Alle weiteren Parameter, die vom Aufrufer übergeben werden, werden an die Parameterliste angefügt.
Die MaxParams- und IsVariadic-Eigenschaft der Funktionsobjekte werden evaluiert, um festzustellen, ob die Eigenschaft Parameter akzeptieren kann. Wenn MaxParams 1 bei Get oder 2 bei Set ist und IsVariadic False oder undefiniert ist, kann die Eigenschaft keine Parameter akzeptieren; stattdessen werden sie an die __Item-Eigenschaft des von Get zurückgegebenen Objekts weitergeleitet.
Entfernt eine eigene Eigenschaft aus einem Objekt.
EntfernterWert := Obj.DeleteProp(Name)
Typ: Zeichenkette
Der Name einer Eigenschaft.
Typ: Beliebig
Diese Methode gibt den Wert der entfernten Eigenschaft zurück (leer, wenn es keinen gibt).
Gibt einen Deskriptor für eine bestimmte eigene Eigenschaft zurück, der mit DefineProp kompatibel ist.
Deskriptor := Obj.GetOwnPropDesc(Name)
Typ: Zeichenkette
Der Name einer Eigenschaft.
Typ: Objekt
Bei einer dynamischen Eigenschaft ist der Rückgabewert ein neues Objekt mit einer eigenen Eigenschaft pro Akzessorfunktion: Get, Set, Call. Jede Eigenschaft ist nur vorhanden, wenn die entsprechende Akzessorfunktion in Obj selbst definiert ist. Bei einer Werteigenschaft ist der Rückgabewert ein neues Objekt mit einer Eigenschaft namens Value. In solchen Fällen gilt: Obj.GetOwnPropDesc(Name).Value == Obj.%Name%
.
Das Ändern des zurückgegebenen Objekts hat keinen Einfluss auf Obj, es sei denn, DefineProp wird aufgerufen.
Es wird ein PropertyError ausgelöst, wenn Obj keine Eigenschaft mit diesem Namen hat. Das Skript kann ermitteln, ob eine Eigenschaft dynamisch ist, indem es not Deskriptor.HasProp("Value")
prüft, wobei Deskriptor der Rückgabewert von GetOwnPropDesc ist.
Gibt 1 (true) zurück, wenn ein Objekt eine Eigenschaft mit einem bestimmten Namen besitzt, andernfalls 0 (false).
HatEigeneEigenschaft := Obj.HasOwnProp(Name)
Die Standardimplementierung dieser Methode ist auch als Funktion definiert: ObjHasOwnProp(Obj, Name)
.
Enumeriert die eigenen Eigenschaften eines Objekts.
For Name , Wert in Obj.OwnProps()
Diese Methode gibt einen neuen Enumerator zurück. Der Enumerator wird typischerweise direkt an eine For-Schleife übergeben, die den Enumerator pro Schleifenwiederholung einmal aufruft. Jeder Aufruf des Enumerators gibt den nächsten Eigenschaftsnamen und/oder Wert zurück. Die Variablen der For-Schleife entsprechen den folgenden Parametern des Enumerators:
Typ: Zeichenkette
Der Name der Eigenschaft.
Typ: Beliebig
Der Wert der Eigenschaft.
Wenn die Eigenschaft eine Getter-Methode hat, wird sie aufgerufen, um den Wert zu ermitteln (es sei denn, Wert wird weggelassen).
Dynamische Eigenschaften sind in der Enumeration enthalten. Allerdings:
Hinweis: Eigenschaften, die von einer Methodendefinition definiert werden, haben typischerweise keinen Getter und werden daher übersprungen.
Um eigene Eigenschaften zu enumerieren, ohne Eigenschafts-Getter aufzurufen, oder um alle Eigenschaften unabhängig vom Typ zu enumerieren, übergeben Sie nur eine einzige Variable an die For-Schleife oder den Enumerator. GetOwnPropDesc kann verwendet werden, um Werteigenschaften von dynamischen Eigenschaften zu unterscheiden und gleichzeitig den Wert oder Getter/Setter/Methode abzurufen.
Methoden werden typischerweise von der Enumeration im Zwei-Parameter-Modus ausgeschlossen, da die Auswertung der Eigenschaft normalerweise davon abhängt, ob das Objekt einen entsprechenden Getter oder Wert hat, entweder im selben Objekt oder in einem Basisobjekt. Um Inkonsistenzen bei zwei angegebenen Variablen zu vermeiden, überspringt OwnProps eigene Eigenschaften, die nur eine Call-Akzessorfunktion haben. Zum Beispiel:
Die Standardimplementierung dieser Methode ist auch als Funktion definiert: ObjOwnProps(Obj)
.
Ermittelt oder setzt das Basisobjekt eines Objekts.
AktuelleBasisObj := Obj.Base
Obj.Base := NeueBasisObj
NeueBasisObj muss ein Object sein.
Wenn die Zuweisung der neuen Basis den nativen Typ des Objekts ändert, wird eine Ausnahme ausgelöst. Der native Typ eines Objekts wird vom nächstgelegenen Prototypobjekt einer internen Klasse bestimmt, wie z.B. Object.Prototype
oder Array.Prototype
. Zum Beispiel muss eine Array-Instanz immer von Array.Prototype
ableiten, entweder direkt oder indirekt.
Eigenschaften und Methoden werden dynamisch vom Basisobjekt geerbt, d.h. beim Ändern der Basis eines Objekts ändert sich auch die Verfügbarkeit von geerbten Eigenschaften und Methoden.
Diese Eigenschaft wurde von Any geerbt, kann aber nur bei Object-Instanzen gesetzt werden.
Siehe auch: ObjGetBase, ObjSetBase
Setzt das Basisobjekt eines Objekts.
ObjSetBase(Obj, BasisObj)
Es werden keine Metafunktionen oder Eigenschaftsfunktionen aufgerufen. Das Überschreiben der Base-Eigenschaft hat keinen Einfluss auf das Verhalten dieser Funktion.
Es wird eine Ausnahme ausgelöst, wenn Obj oder BasisObj vom falschen Typ ist.
Siehe auch: ObjGetBase, Base-Eigenschaft
Gibt die Anzahl der eigenen Eigenschaften eines Objekts zurück.
Anzahl := ObjOwnPropCount(Obj)
Setzt die aktuelle Kapazität des internen Arrays eigener Eigenschaften des Objekts.
MaxEigenschaften := ObjSetCapacity(Obj, MaxEigenschaften)
Typ: Integer
Die neue Kapazität. Wenn dieser Parameter kleiner als die aktuelle Anzahl eigener Eigenschaften ist, wird dieser Wert stattdessen verwendet und ungenutzter Speicher freigegeben.
Typ: Integer
Diese Methode gibt die neue Kapazität zurück.
Es wird eine Ausnahme ausgelöst, wenn Obj vom falschen Typ ist.
Gibt die aktuelle Kapazität des internen Eigenschaften-Arrays des Objekts zurück.
MaxElemente := ObjGetCapacity(Obj)
Es wird eine Ausnahme ausgelöst, wenn Obj vom falschen Typ ist.