Perché l'oggetto viene restituito da getDefinitionByName ()?
-
03-07-2019 - |
Domanda
In Actionscript 3, perché getDefinitionByName () restituisce un oggetto quando i documenti dicono:
Restituisce un riferimento all'oggetto classe della classe specificata dal parametro name.
In base a ciò, vorrei concludere che l'oggetto restituito dovrebbe essere Class anziché Object. Qualcuno può illuminarmi perché non è così?
Soluzione
getDefinitionByName può anche restituire una funzione, come getDefinitionByName ('flash.utils.getDefinitionByName'). Funziona solo con funzioni a livello di spazio dei nomi, non con metodi di classe statici.
Altri suggerimenti
Nonostante la firma del metodo, getDefinitionByName restituisce Class . Penso che la firma fuorviante sia dovuta al metodo esistente prima dell'oggetto Class (quando utilizzato per restituire un'istanza di oggetto anonimo / esteso).
Forse Adobe ha ritenuto che questa funzione potrebbe restituire valori diversi in una versione futura di Flash Player. Ad esempio, ECMAScript, lo standard su cui si basa ActionScript, ha storicamente usato oggetti Function
con prototipi come base per oggetti di classe. Durante le discussioni sulle versioni più recenti dello standard ECMAScript, ci sono stati suggerimenti per "congelare". classi basate sulle funzioni in fase di esecuzione per trasformarle in oggetti simili a Class
in fase di compilazione. E se potessi anche specificare un nome di definizione per loro? Sono effettivamente del tipo Class
a questo punto o sono ancora o digitano Function
? Probabilmente più tardi, secondo me. Entrambi i riferimenti 'Class' e 'Function' possono essere generalizzati come Object
, quindi il tipo restituito ha senso in questo contesto.
Nota: questa spiegazione è puramente speculazione basata su ciò che ho letto nella wiki delle specifiche ECMAScript e i blog di vari membri del comitato.