MozillaPL.org - polskie centrum Mozilli

Główne menu:

Czy obiekt implementuje interfejs?

Projektowanie aplikacji i rozszerzeń opartych na technologiach Mozilla Foundation: XUL, JavaScript, XPCOM, XBL i innych

Moderator: Pomocy?!

Czy obiekt implementuje interfejs?

Postautor: GabrielBaines » 17 sierpnia 2003, 22:18

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5b) Gecko/20030815

Czy mogłby mi ktos podpowiedzieć jakiś elegancki sposób na sprawdzenie w kodzie JavaScript'owym działającym w kontekscie Mozilli czy dany obiekt implementuje dany interfejs?

Innymi slowy chodzi mi o takie javowe instanceof, tylko w JavaScript.

Sam znalazłem dwa tropy, ale nie zaprowadziły mnie zbyt daleko:

1) wykorzystanie typeof z JavaScript - niestety nie widzi typów Mozillowych. Wszystko jest 'Object'. Z resztą co niby typeof miałoby zwrócić dla obiektów implementujących wiele interfejsów?

2) zawołanie na rzecz obiektu metody QueryInterface - świetne, tylko że wymaga aby obiekt implementował nsISupports.

Jakieś inne pomysły? To przeciez jest chyba częsty problem?
Gabriel
GabrielBaines
Moderator
 
Posty: 450
Z nami od: 05 marca 2002, 21:42

Postautor: prefiks » 18 sierpnia 2003, 00:25

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5a) Gecko/20030810 Mozilla Firebird/0.6.1

Chcesz sprawdzić czy kod napisany w javascripcie jest prawidłową implementacją jakiegoś interfejsu ? Jedyne co mi przychodzi do głowy to chyba tylko sprawdzić czy dany objekt ma zdefiniowane wszytkie pola i metody danego interfejsu. Bez stworzenia własnego komponentu się chyba raczej nie obejdzie.
prefiks
 
Posty: 179
Z nami od: 30 grudnia 2002, 01:45

Postautor: GabrielBaines » 18 sierpnia 2003, 09:39

Przeglądarka: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.3) Gecko/20030312

prefiks pisze:Chcesz sprawdzić czy kod napisany w javascripcie jest prawidłową implementacją jakiegoś interfejsu ?

Nie, chcę sprawdzić z poziomu kodu napisanegow javascripcie czy obiekt, do ktorego dostałem z zewnątrz referencję (przez xpconnect) implementuje dany interfejs. Sam obiekt jest w zaimplementowany w czymkolwiek, np w C++.

prefiks pisze:Jedyne co mi przychodzi do głowy to chyba tylko sprawdzić czy dany objekt ma zdefiniowane wszytkie pola i metody danego interfejsu. Bez stworzenia własnego komponentu się chyba raczej nie obejdzie.

No tak, to by zadziałało, ale wolałbym bardziej eleganckie rozwiązanie.
Chyba już pozostanę przy QueryInterface na nsISupports. W końcu jak cos dostaje po xpconnect i nie jest nullem, to rozsądnie będzie przyjąć, że to referencja do komponentu implementującego nsISupports.
Gabriel
GabrielBaines
Moderator
 
Posty: 450
Z nami od: 05 marca 2002, 21:42

Postautor: prefiks » 18 sierpnia 2003, 12:44

Przeglądarka: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5a) Gecko/20030810 Mozilla Firebird/0.6.1

Cóż... Takie coś można osiągnąć prościej, przykładowo:
Kod: Zaznacz cały
obj instanceof Components.interfaces.nsIRDFService

zwraca true lub false zależnie od tego czy obiekt implementuje interfejs.
prefiks
 
Posty: 179
Z nami od: 30 grudnia 2002, 01:45

Postautor: GabrielBaines » 18 sierpnia 2003, 12:49

Przeglądarka: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.3) Gecko/20030312

Naprawdę jest instanceof w JavaScript? No to rewelacja. Dokładnie o to mi chodziło. Dzięki.
Gabriel
GabrielBaines
Moderator
 
Posty: 450
Z nami od: 05 marca 2002, 21:42

Postautor: Gandalf » 18 sierpnia 2003, 17:23

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; PL; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1

Gandalf
 
Posty: 1802
Z nami od: 29 czerwca 2002, 04:37
Lokalizacja: Warszawa


Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot], Google [Bot]

Przejdź do powiązanej strony

Nawigacja:

Stopka: