CreateObject和Wscript.CreateObject有什么区别?

有没有人知道使用该选项背后的原因:

Wscript.CreateObject("some.object") 

 CreateObject("some.object") 

在VBScript中? 当我find使用Wscript.CreateObject文档或示例时,我通常使用CreateObject重写,因为它似乎总是工作,然后我可以轻松地在HTA或ASP中重用该代码。 但是我总是想知道为什么这个特性存在,以及如果在VBScript中使用这种或那种方式会产生什么差别。

两者之间没有什么区别,只是用一个参数来调用它们。 做的事情完全一样。

如果您使用两个参数进行调用,两者之间的差异只能作为证据。 声明

 Wscript.CreateObject("some.object", "AnotherParam") 

 CreateObject("some.object", "AnotherParam") 

做完全不同的事情:

VBScript CreateObject函数将第二个参数解释为远程计算机名称,并尝试在该远程计算机上创建指定的COM对象; 在这个例子中,它尝试在名为“AnotherParam”的远程计算机上以ProgId为“some.object”实例化一个对象的实例。 WScript的CreateObject方法将第二个参数解释为子程序前缀,用于处理来自对象的事件。 两个GetObject函数是类似的相关。

(改编自TechNet ,“使用WSH比较VBScript CreateObject和GetObject函数”一节)

我猜WScript对象有CreateObject方法,所以任何Windows脚本语言都可以创建COM对象。

VBScript具有作为全局函数的功能,但其他Windows脚本宿主语言可能不具有这种功能。

例如,JScript没有一个全局的CreateObject函数(我相信)(它确实有一个var a = new ActiveXObject("...")语法,所以你不需要在JScript中使用WScript.CreateObject )。

我猜想这两个函数没有区别。

编辑 :有一个区别(但只有当你试图实例远程主机上的DCOM对象),请参阅由@托马斯·彼得森的答案。

JScript没有全局的CreateObject? WScript不能使用JScript?

来自devGuru的代码

 // JScript var objIE = WScript.CreateObject("InternetExplorer.Application","objIE_") objIE.Visible = true while (objIE.Visible){ WScript.Sleep(500); } function objIE_NavigateComplete2(pDisp, URL){ WScript.Echo("You just navigated to", URL) } function objIE_OnQuit(){ boolBrowserRunning = false ; }