2010-09-23 68 views
1

我沒有找到這個「xpcomInterface」的類型,這個名字沒有任何類的文檔。任何想法?這個對象是什麼類型的?它在哪裏記錄?

這個片段是從Mozilla的網站:

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

--update

我發現boxObject導致nslBoxObject,但沒有提及任何QueryInterface如上使用。還有對xulplanet.com的引用,它不再存在。

回答

2

那麼,xpcomInterface只是變量的名稱。

您應該閱讀約XPCOM and XPCOM interfacesQueryInterface()是所有XPCOM對象必須實現的方法,讓您以「鑄造」的對象在一定的接口可能性:

(...)功能QueryInterface()是可以將所有組件提供的功能用於獲取該組件的特定界面。這個函數接受一個參數,即你想獲得的接口。 (...)

在這個例子中,有一些對象scroll.boxObject更新:這是一個nsIBoxObject你發現需要注意的是這又只是一個接口(帶nsI開始)),這似乎實現接口nsIScrollBoxObject。通過使用QueryInterface,您可以訪問那些接口的方法,如ensureElementIsVisible

+0

奇怪,如果javascript沒有指定類型,爲什麼這個QueryInterface存在?看起來像一個不需要的演員.. – 2010-09-23 18:46:57

+2

因爲那些XPCOM組件不一定是JavaScript對象:* XPCOM是一個跨平臺組件對象模型,類似於Microsoft COM。它有多種語言的綁定,除了C++之外,還允許XPCOM組件在JavaScript,Java和Python中使用和實現。* https://developer.mozilla.org/en/XPCOM據我所知,它更多就像幾種語言之間的橋樑。 – 2010-09-23 18:50:18

+1

這不是傳統意義上的「鑄造」 - 它更多的是獲得了該對象的「組成部分」(參見費利克斯提到的文檔)。在你的情況下,把它看做像下面這樣的「for scroll.boxObject,得到它實現的接口,叫做'nsIScrollBoxObject'。 – pnomolos 2010-09-23 18:51:14

相關問題