Έλεγχος τύπου Class με γραφομηχανή

ψήφοι
107

Είμαι πολύ ενθουσιασμένος για γραφομηχανή , έτσι άρχισα να παίζω μαζί του. Ως προγραμματιστής Actionscript, κάνει Javascript λιγότερο σκληρά.

Ωστόσο, σε Actionscript είναι δυνατόν να ελέγξετε τον τύπο κατά το χρόνο εκτέλεσης χρησιμοποιώντας τον χειριστή IS :

var mySprite:Sprite = new Sprite(); 
trace(mySprite is Sprite); // true 
trace(mySprite is DisplayObject);// true 
trace(mySprite is IEventDispatcher); // true

Είναι δυνατόν να εντοπίσει αν μια μεταβλητή (εκτείνεται ή) είναι μια συγκεκριμένη κατηγορία ή διασύνδεση με γραφομηχανή; Δεν μπόρεσα να βρω τίποτα γι 'αυτό στις γλωσσικές προδιαγραφές, θα πρέπει να υπάρχει κατά την εργασία με τις κατηγορίες / διεπαφές.


Ενημέρωση: Λίγα χρόνια αργότερα. Μου έπεσε γραφομηχανή πολύ γρήγορα και να αρχίσετε να χρησιμοποιείτε Haxe που συγκεντρώνει σε εξαιρετική JavaScript και έχει πραγματικό είδος ελέγχου που λειτουργεί στις τάξεις, διασυνδέσεις κ.λπ. Επίσης έχει απομάκρυνση νεκρών κώδικα, καλύτερη enums, αφηρημένη τύπους και τη διάρκεια της μεταγλώττισης λειτουργίες (μακροεντολές), καταρτίζει επίσης σε ένα αρχείο, έτσι δεν χρειάζεται πολύπλοκο σύστημα δέσμη κατασκευής.

Δημοσιεύθηκε 08/10/2012 στις 21:47
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
142

4.19.4 Ο χειριστής instanceof

Ο instanceofχειριστής απαιτεί το αριστερό τελεστή να είναι του τύπου Οποιαδήποτε, έναν τύπο αντικειμένου, ή ενός τύπου παράμετρο τύπου, και ο δεξιός όρος να είναι του τύπου Οποιαδήποτε ή υποτύπου του τύπου διεπαφής «Λειτουργία». Το αποτέλεσμα είναι πάντα το Boolean πρωτόγονο είδος.

Έτσι, θα μπορούσατε να χρησιμοποιήσετε

mySprite instanceof Sprite;

Σημειώστε ότι αυτό χειριστής είναι επίσης ActionScript, αλλά δεν θα πρέπει να χρησιμοποιείται πια εκεί:

Ο χειριστής είναι, το οποίο είναι νέο για ActionScript 3.0, επιτρέπει να ελεγχθεί αν μια μεταβλητή ή έκφραση είναι μέλος ενός δεδομένου τύπου δεδομένων. Σε προηγούμενες εκδόσεις της ActionScript, ο χειριστής instanceof παρέχεται αυτή τη λειτουργία, αλλά στην ActionScript 3.0 ο χειριστής instanceof δεν πρέπει να χρησιμοποιείται για τη δοκιμή για την ένταξη τύπο δεδομένων. Η είναι χειριστής θα πρέπει να χρησιμοποιηθεί αντί του χειριστή instanceof για χειροκίνητη έλεγχο τύπου, επειδή η έκφραση x instanceof y απλώς ελέγχει το πρωτότυπο αλυσίδα του x για την ύπαρξη του y (και σε ActionScript 3.0, το πρωτότυπο αλυσίδα δεν παρέχει μια πλήρη εικόνα της η ιεραρχία κληρονομικότητας).

Γραφομηχανή του instanceofμερίδια τα ίδια προβλήματα. Δεδομένου ότι είναι μια γλώσσα η οποία είναι ακόμα σε εξέλιξη αυτή είναι συστήνω να δηλώσει μια πρόταση των εν λόγω εγκαταστάσεων.

Δείτε επίσης:

Απαντήθηκε 08/10/2012 στις 21:54
πηγή χρήστη

ψήφοι
8

Γραφομηχανή έχουν έναν τρόπο επικύρωσης του τύπου μιας μεταβλητής στο χρόνο εκτέλεσης. Μπορείτε να προσθέσετε μια λειτουργία επικύρωσης που επιστρέφει ένα κατηγόρημα τύπου . Έτσι, μπορείτε να καλέσετε τη λειτουργία αυτή στο εσωτερικό μια εντολή if, και να είστε σίγουροι ότι όλος ο κώδικας μέσα σε αυτό το μπλοκ είναι ασφαλές για χρήση ως είδος νομίζετε ότι είναι.

Παράδειγμα από τα docs γραφομηχανή:

function isFish(pet: Fish | Bird): pet is Fish {
   return (<Fish>pet).swim !== undefined;
}

// Both calls to 'swim' and 'fly' are now okay.
if (isFish(pet)) {
  pet.swim();
}
else {
  pet.fly();
}

Δείτε περισσότερα στο: https://www.typescriptlang.org/docs/handbook/advanced-types.html

Απαντήθηκε 21/11/2016 στις 10:42
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more