2010-09-23 2 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 interfaces. QueryInterface() это метод, который все объекты XPCOM должны реализовать и дает возможность «слепок» объект к определенному интерфейсу:

(...) Функция QueryInterface() является функция, обеспечиваемая всеми компонентами, которые могут быть используется для получения определенного интерфейса этого компонента. Эта функция принимает один параметр, интерфейс, который вы хотите получить. (...)

В этом примере есть некоторый объект scroll.boxObject (обновление:. которое является nsIBoxObject как вы выяснили Обратите внимание, что это опять-таки только интерфейс (начинается с nsI)), что кажется для реализации интерфейса nsIScrollBoxObject. Используя QueryInterface, вы можете получить доступ к этим интерфейсам, например ensureElementIsVisible.

+0

странно, если javascript не указывает тип, почему этот QueryInterface существует? выглядит как ненужное кастинг для меня .. –

+2

Поскольку эти компоненты XPCOM не обязательно являются объектами JavaScript: * XPCOM - это объектная модель для кросс-платформенных компонентов, аналогичная Microsoft COM. Он имеет несколько языковых привязок, позволяя использовать компоненты XPCOM и реализовывать их в JavaScript, Java и Python в дополнение к C++. * Https://developer.mozilla.org/en/XPCOM Насколько я понял, это больше как мост между несколькими языками. –

+1

Это не «кастинг» в традиционном смысле - это больше, что он получает «компонент» этого объекта (см. Упомянутые документы Felix). В вашем случае подумайте об этом как о чем-то вроде следующего: «для scroll.boxObject, получите интерфейс, который он реализует, который называется« nsIScrollBoxObject ». – pnomolos

Смежные вопросы