VBS中CreateObject和WScript.CreateObject的區(qū)別介紹

字號(hào):


    很多VBS新手都很困惑CreateObject和WScript.CreateObject有什么區(qū)別,為什么一些代碼中用CreateObject,而另一些卻用WScript.CreateObject
    CreateObject和WScript.CreateObject的區(qū)別一:
    CreateObject是VBS的內(nèi)置函數(shù),屬于語(yǔ)言的一部分;而WScript.CreateObject是Windows腳本宿主(wscript.exe和cscript.exe)提供的WScript對(duì)象的方法。類似于批處理中內(nèi)部命令和外部命令的關(guān)系。在VBS中,CreateObject總是可用的,而WScript.CreateObject只有在宿主為wscript.exe和cscript.exe的情況下才可以使用,在WMI、QTP、SecureCRT、EmEditor等其他宿主環(huán)境是無(wú)法使用的。
    CreateObject和WScript.CreateObject的區(qū)別二:
    如果只用第一個(gè)參數(shù),那么CreateObject和WScript.CreateObject幾乎是相同的;但是如果要用到第二個(gè)參數(shù),那么兩者就完全不同了。CreateObject的第二個(gè)參數(shù)用來(lái)通過(guò)DCOM在遠(yuǎn)程服務(wù)器上創(chuàng)建對(duì)象;而WScript.CreateObject的第二個(gè)參數(shù)用來(lái)創(chuàng)建本地對(duì)象并響應(yīng)事件。
    一個(gè)響應(yīng)事件的簡(jiǎn)單例子:
    代碼如下:
    Dim IE
    Set IE = WScript.CreateObject("InternetExplorer.Application", "IE_")
    IE.Visible = True
    IE.Navigate "http://www.jb51.net"
    Do
    WScript.Sleep 1000
    Loop
    Sub IE_OnQuit()
    MsgBox "正在關(guān)閉Demon's Blog"
    WScript.Quit
    End Sub
    CreateObject和WScript.CreateObject的區(qū)別三:
    因?yàn)镃reateObject是VBS的內(nèi)置函數(shù),不需要通過(guò)COM來(lái)調(diào)用,所以CreateObject比WScript.CreateObject要稍微快一點(diǎn)點(diǎn)(雖然幾乎可以忽略不計(jì)):
    代碼如下:
    t = Timer
    For i = 1 To 100000
    Set WshShell = WScript.CreateObject("Wscript.Shell")
    Next
    WScript.Echo Timer - t
    'By Demon
    t = Timer
    For i = 1 To 100000
    Set WshShell = CreateObject("Wscript.Shell")
    Next
    WScript.Echo Timer - t
    Demon的建議:盡量使用CreateObject函數(shù),除非你需要響應(yīng)事件。這樣至少有三個(gè)好處:可移植性更好、速度更快、代碼更短。