Czy obiekt implementuje interfejs?
Moderator: Pomocy?!
Posty: 6
• Strona 1 z 1
Czy obiekt implementuje interfejs?
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?
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
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
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
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:
zwraca true lub false zależnie od tego czy obiekt implementuje interfejs.
- 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
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
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
Posty: 6
• Strona 1 z 1
Wróć do Programowanie z użyciem technologii Mozilli
Kto jest online
Zarejestrowani użytkownicy: Bing [Bot], Google [Bot]