我如何以编程方式检查在运行时的ActiveXObject,使用Javascript?
-
21-09-2019 - |
题
我期待创建一个JavaScript库ActiveX对象,使chainability。
例如,我期待替换这样的:
var dbEngine=new ActiveXObject('DAO.DBEngine.36');
var dbs=dbEngine.OpenDatabase('D:\\Todo.mdb');
var rs=dbs.OpenRecordset('SELECT * FROM ListItems');
像这样的东西(一拉jQuery的):
var rs=AX('DAO.DBEngine.36')
.OpenDatabase('D:\\Todo.mdb')
.OpenRecordset('SELECT * FROM ListItems');
我知道我能做到这一点:
var rs=new ActiveXObject('DAO.DBEngine.36')
.OpenDatabase('D:\\Todo.mdb')
.OpenRecordset('SELECT * FROM ListItems');
,但我不从记录对象访问数据库对象的方式。
为了做到这一点,对AX功能应该在内部创建DBEngine对象并检查其成员/属性,然后暴露对应的返回的对象的方法。
如果成员/属性返回一个对象,该对象本身将被返回包裹在AX功能。
解决方案
只有实现IDispatchEx对象可以在运行时检查。 MSDN专门列出的IDispatch和 IDispatchEx 之间的差异:
IDispatchEx的开发是为了提供 IDispatch接口的所有服务,以及 一些扩展,是 适用于更动态 后期绑定的语言,如脚本 语言。的附加功能 IDispatchEx超出规定的那些 IDispatch的是:
新成员添加到对象 ( “EXPANDO”)。
删除对象的成员。
区分大小写分派操作。
搜索与隐式构件 名。
<强>枚举的对象的dispid的强>
地图从DISPID到元素名称。
获取对象的属性 成员。
方法调用与此 指针。
允许支持的浏览器 命名空间的概念来获得 一个对象的名称空间父。
我做了大胆的相关问题。
由于埃里克在评论中指出的那样,你可以使用使用的foreach枚举对象的成员(或...在吧?),但我不知道,从这个问题,你有什么特别想做的事
由于不是所有的ActiveX控件将实现IDispatchEx(或可能无法正常或完全实现IDispatchEx的所有方法),你正在寻找一起玩有具体的控制?
更多细节将导致更好的答案。
不隶属于 StackOverflow