instanceof
Operatora wymaga lewy argument być typu każdy, typ obiektu lub typu parametru typu, a odpowiedni argument być dowolnego typu lub podtypu „funkcja” typu interfejsu. Wynik jest zawsze typu logicznego typu pierwotnego.
Więc możesz użyć
mySprite instanceof Sprite;
Pamiętaj, że ten operator jest również w języku ActionScript, ale nie należy go już tam używać:
Operator is, który jest nowością w języku ActionScript 3.0, pozwala przetestować, czy zmienna lub wyrażenie należy do danego typu danych. W poprzednich wersjach ActionScript operator instanceof zapewniał tę funkcjonalność, ale w ActionScript 3.0 operator instanceof nie powinien być wykorzystywany do testowania członkostwa w typach danych. Do ręcznego sprawdzania typu należy użyć operatora is zamiast operatora instanceof, ponieważ wyrażenie x instanceof y sprawdza jedynie łańcuch prototypowy x pod kątem istnienia y (aw ActionScript 3.0 łańcuch prototypowy nie zapewnia pełnego obrazu hierarchia dziedziczenia).
TypeScript ma instanceof
te same problemy. Ponieważ jest to język, który wciąż się rozwija, polecam przedstawić propozycję takiego rozwiązania.
Zobacz też:
Std.is(pet, Fish)
, który działa na typach, interfejsach itp.isFish
Sama jest orzecznikiem, który jest tworzony, a jego ciało nie musi być orzecznikiem jeden-liner. Zaletą tego jest to, że kompilator rozumie w czasie kompilacji odpowiednie możliwe funkcje, ale kod wewnątrzisFish
jest wykonywany w czasie wykonywania. Możesz nawet mieć wartownik zawierającyinstanceof
instrukcję, np.return pet instanceof Fish
(Zakładając, że jest to klasa, a nie interfejs), ale byłoby to niepotrzebne, ponieważ kompilator rozumieinstanceof
bezpośrednio.(pet as Fish)
ponieważ tslinter narzeka(<Fish>pet)
. Zobacz tslint docMożesz do tego użyć
instanceof
operatora. Z MDN:Jeśli nie wiesz, jakie są prototypy i łańcuchy prototypów, bardzo polecam poszukać ich. Oto także przykład JS (TS działa pod tym względem w podobny sposób), który może wyjaśnić pojęcie:
Łańcuch prototypów w tym przykładzie to:
animal> Animal.prototype> Object.prototype
źródło