为什么我必须使用 WScript 编写 WScript.Echo 而它对于 CreateObject 不是强制性的?

Why do I have to write WScript.Echo with WScript while it's not mandatory for CreateObject?

在 VBScript 中,有很多用户写 WScript.CreateObject("...") 的示例,而同时 script56.chm 和其他相关文档建议只写 CreateObject("...")似乎 的工作方式相同。

我想知道为什么 WScript.Echo 不一样(你不能只写 Echo...)

我阅读了以下关于 WScript.CreateObject 背后原因的问题和评论,但似乎没有找到任何相关内容:What is the difference between CreateObject and Wscript.CreateObject?

还是我漏掉了什么?

你看到不协调是因为你认为你在两种情况下使用相同的东西,但你不是。

您有两个不同的元素可以协作 运行 您的脚本:脚本宿主和脚本引擎。脚本宿主是初始化处理所用语言的脚本引擎的可执行文件。在通常的客户端 OS 安装中,您至少有三个脚本主机(wscript.execscript.exemshta.exe),它们可以使用两个不同的脚本引擎(VBScriptJScript).

WScript.CreateObject 是脚本宿主(cscript.exewscript.exe)公开的 WScript 对象的 方法 允许脚本引擎(正如所说 VBScriptJScript 原生于 OS,但您可以安装其他引擎)实例化一个 COM 对象。

CreateObject(这里没有WScript)是VBScript脚本引擎的函数,与WScript 对象或脚本宿主。

两者同名,但不是一回事。在VBScript中调用CreateObject函数是"equivalent"JScript中使用new ActiveXObject( ... )。在这两种情况下,您都使用脚本引擎公开的内容,而不是脚本宿主公开的内容。

例如,您可以在 .hta 文件中使用这两个(CreateObjectnew ActiveXObject( ... ))中的任何一个而不会出现问题,因为它们是脚本引擎的一部分,但是您可以不要在 .hta 文件中使用 WScript.CreateObject,因为脚本宿主 (mshta.exe) 不会将 WScript 对象暴露给脚本引擎 运行ning 代码。