Javascript 什么';这个物体的类型是什么?记录在哪里?

Javascript 什么';这个物体的类型是什么?记录在哪里?,javascript,xul,xpcom,Javascript,Xul,Xpcom,我没有找到这个“xpcomInterface”的类型,也没有任何具有这个名称的类的文档。有什么想法吗 此片段来自Mozilla的网站: var next = elements.item(i+1); var xpcomInterface = scroll.boxObject.QueryInterface( Components.interfaces.nsIScrollBoxObject); xpcomInterface.ensureElementIsVisible(elements); --更新

我没有找到这个“xpcomInterface”的类型,也没有任何具有这个名称的类的文档。有什么想法吗

此片段来自Mozilla的网站:

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


我发现这导致了,但它没有引用上面使用的任何
QueryInterface
。还有对xulplanet.com的引用,它已经不存在了。

嗯,
xpcointerface
只是变量的名称

你应该读一下
QueryInterface()
是所有XPCOM对象都必须实现的一种方法,它使您可以将对象“强制转换”到某个接口:

(…)函数
QueryInterface()
是所有组件提供的函数,可用于获取该组件的特定接口。此函数接受一个参数,即您想要获得的接口。(……)


在本例中,有一个对象
scroll.boxObject
更新:,这是您发现的
nsIBoxObject
。请注意,这同样只是一个接口(从
nsI
开始),似乎实现了
nsicrollboxobject
接口。通过使用
QueryInterface
,您可以访问那些接口的方法,如
ensureElementIsVisible

奇怪,如果javascript没有指定类型,为什么会存在此QueryInterface?对我来说,这似乎是不必要的强制转换。因为那些XPCOM组件不一定是JavaScript对象:XPCOM是一个跨平台的组件对象模型,类似于Microsoft COM。它有多个语言绑定,允许使用XPCOM组件,并在C++中使用JavaScript、java和Python。据我所知,它更像是几种语言之间的桥梁。它不是传统意义上的“铸造”——它更多的是获得该对象的“组件”(参见Felix提到的文档)。在您的情况下,可以将其视为执行以下操作:“对于scroll.boxObject,获取它实现的称为“nsicrollboxobject”的接口。
QueryInterface
是在
nsISupports
上定义的三种方法之一。(另外两个,
AddRef
Release
,不能直接从JavaScript获得;XPConnect为您管理这两个。)