2010-09-23 15 views
1

Je ne trouve pas quel est le type de cette "xpcomInterface", et il n'y a aucune documentation de n'importe quelle classe avec ce nom. Une idée?Quel est le type de cet objet? Et où est-il documenté?

Cet extrait est le site Web de Mozilla:

var next = elements.item(i+1); 
var xpcomInterface = scroll.boxObject.QueryInterface(
Components.interfaces.nsIScrollBoxObject); 
xpcomInterface.ensureElementIsVisible(elements); 

--update

Je trouve boxObject qui mène à nslBoxObject, mais il ne fait référence à aucune QueryInterface tel qu'il est utilisé ci-dessus. Il y a aussi des références à xulplanet.com qui n'est plus là.

Répondre

2

Eh bien, xpcomInterface est juste le nom de la variable. Vous devriez lire environ XPCOM and XPCOM interfaces. QueryInterface() est une méthode que tous les objets XPCOM doivent mettre en œuvre et vous donne la possibilité de « jeter » un objet à une certaine interface:

(...) La fonction QueryInterface() est une fonction fournie par tous les composants qui peuvent être utilisé pour obtenir une interface spécifique de ce composant. Cette fonction prend un paramètre, l'interface que vous voulez obtenir. (...)

Dans cet exemple, il y a un objet scroll.boxObject (mise à jour. qui est un nsIBoxObject que vous avez découvert Notez que ceci est à nouveau juste une interface (qui commence par nsI)) qui semble pour implémenter l'interface nsIScrollBoxObject. En utilisant QueryInterface, vous pouvez accéder aux méthodes de cette interface comme ensureElementIsVisible.

+0

étrange, si javascript ne spécifie pas le type, pourquoi cette QueryInterface existe? ressemble à un casting inutile pour moi .. –

+2

Parce que ces composants XPCOM ne sont pas nécessairement des objets JavaScript: * XPCOM est un modèle d'objet de composant multiplateforme, similaire à Microsoft COM. Il a plusieurs liaisons de langage, permettant aux composants XPCOM d'être utilisés et implémentés en JavaScript, Java et Python en plus de C++. * Https://developer.mozilla.org/en/XPCOM Autant que je l'ai compris, c'est plus comme un pont entre plusieurs langues. –

+1

Ce n'est pas "couler" dans le sens traditionnel - c'est plus que ça obtient un "composant" de cet objet (voir les docs Felix mentionnés). Dans votre cas, pensez à faire quelque chose comme le suivant "pour scroll.boxObject, obtenir l'interface qu'il implémente qui s'appelle 'nsIScrollBoxObject' – pnomolos