我期待创建一个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的所有方法),你正在寻找一起玩有具体的控制?

更多细节将导致更好的答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top