Я пытаюсь сделать экстерны для компилятора закрытия Google для типов, у которых нет конструктора.
Я пробовал следующее, но это дает мне ошибку Bad type annotation. Unknown type WindowsMediaActiveX.Cdrom
, потому что ничто не говорит компилятору, что WindowsMediaActiveX.Cdrom
является типом, а не просто набором методов/свойств.
/**
* @fileoverview Declares externs for the Windows media player ActiveX control.
* @author Joshua Dwire
* @suppress {duplicate}
*/
var WindowsMediaActiveX={};
/**
* Methods and properties for accessing a CD or DVD in its drive.
*/
WindowsMediaActiveX.Cdrom={};
/**
* Retrieves the CD or DVD drive letter.
* @type {string}
* @readonly
*/
WindowsMediaActiveX.Cdrom.prototype.driveSpecifier;
/**
* Methods and properties for accessing a collection of CD or DVD drives.
*/
WindowsMediaActiveX.CdromCollection={};
/**
* Retrieves the Cdrom object associated with a particular drive letter.
* @param {string} driveSpecifier String containing the drive letter followed by a colon (":") character.
* @returns {WindowsMediaActiveX.Cdrom}
*/
WindowsMediaActiveX.CdromCollection.prototype.getByDriveSpecifier=function(driveSpecifier){};
Я знаю, что могу измениться:
/**
* Methods and properties for accessing a CD or DVD in its drive.
*/
WindowsMediaActiveX.Cdrom={};
to:
/**
* Methods and properties for accessing a CD or DVD in its drive.
* @constructor
*/
WindowsMediaActiveX.Cdrom=function(){};
но тогда компилятор не будет показывать предупреждение, если я или кто-то другой попытается использовать new WindowsMediaActiveX.Cdrom()
. Любые идеи о том, как это определить?
Для тех из вас, кому нужна дополнительная информация, я работаю над медиаплеером, который будет использовать элемент управления Windows Media ActiveX для воспроизведения мультимедиа. Я также использую компилятор и библиотеку Google Closure. Мне нужно определить внешние элементы, чтобы проигрыватель работал правильно, но ни один из типов, используемых элементом управления ActiveX, не имеет конструкторов. Все они создаются другими методами или путем создания объекта в html. Как мне определить это во внешнем файле? Спасибо за вашу помощь.
({}).prototype
не определено), и они все равно не могут быть созданы для использования прототипа. Используют ли эти компоненты ActiveX некоторые прототипы способом, с которым я не знаком? - person August Lilleaas   schedule 02.11.2012var f = function () {}; f.prototype = WindowsMediaActiveX.Cdrom.prototype; new f()
под капотом? Я не удивлюсь, если Closure Compiler не поддерживает это с его специальным знанием свойстваprototype
. Мое использование компилятора было очень простым, и только с JS, совместимым с расширенным режимом (никаких причудливых хакерских вещей). Моим следующим шагом было бы задать вопрос в списке рассылки компилятора замыкания, размещенном в группах Google, там активно работают многие гуглеры. - person August Lilleaas   schedule 02.11.2012WindowsMediaActiveX.Cdrom
— это просто то, что я определяю, поэтому у меня есть тип, на который можно ссылаться. На самом деле объекты будут созданы путем вставки HTML-кода (см. msdn.microsoft.com/en-us/library/windows/desktop/) или вызвав метод элемента player. Эти методы будут добавлены ActiveX. Дополнительные документы по Windows Media Player SDK см. в разделе msdn.microsoft.com/en-us/library/windows/desktop/. Я пошел вперед и разместил сообщение в группах Google, но мне придется подождать, пока мое сообщение будет одобрено. - person Joshua Dwire   schedule 02.11.2012