ASP具備管理不同語言腳本程序的能力能夠自動調用合適的腳本引擎以解釋腳本代碼和執行內置函數ASP開發環境提供了兩種腳本引擎即VBScript(缺省)和JScript不過開發者並沒有被限制於只能使用這兩種語言只要能夠提供合適的ActiveX腳本引擎就能使用任何腳本語言
腳本語言的選擇往往基於許多不同原因它可能是開發者最為熟悉的語言可能是對給定工程來說能夠提供最多特色支持的也有可能是最具效率的不同的環境和要求使得我們在選擇腳本語言時注重不同的因素同時也使得我們在某些時候面臨選定的腳本語言不能直接提供其它語言固有的函數這一問題或某個腳本已經寫成但用的卻是另外一種腳本語言
此時應該怎麼辦?是否需要用當前所用的腳本語言重寫這些腳本?或者說是否有可能在一種腳本語言中調用其它腳本語言的內置函數?本文要說明的就是在ASP應用中如何讓VBScript腳本和JScript腳本交互以最大限度地獲得兩種腳本語言的特色支持
一VBScript和JScript的內置函數
在VBScript和JScript中有大量的內置函數功能是相同或類似的然而在一種腳本語言中內置的函數並非總是在另外一種腳本語言中也有對應的函數例如VBScript提供了許多用於操作字符串和格式化數據的函數這些函數在JScript中並不存在這些函數包括StrReverse()Filter()以及FormatCurrency()等在另一方面JScript所提供的用於管理數組字符串編碼等的函數在VBScript中也沒有定義如join()reverse()pow()位操作escape()和unescape()等
那麼如果在JScript程序中需要一個VBscript函數該怎麼辦呢?
二異種腳本的互相調用
如果需要在JScript腳本中調用一個VBScript中內置的函數則應該寫一個VBScript用戶定義函數(在這裡調用VBScript內置函數)然後在JScript腳本中象調用公用JScript函數一樣調用這個用戶定義函數
例如如果要調用的VBSCript內置函數是FormatCurrency()則可以聲明如下自定義函數
< SCRIPT LANGUAGE=VBSCRIPT RUNAT=SERVER>
Function FormatValue(Value)
FormatValue = FormatCurrency(Value)
End Function
< /SCRIPT>
接下來在JScript代碼中就可以象普通JScript函數一樣調用FormatValue()了用類似的方法也可以實現VBScript代碼調用JScript函數
應用同樣的規則我們可以在任何腳本內調用任何用戶定義函數不過從JScript腳本內調用一個不帶參數的VBScript過程(Sub)時應略加注意此時在JScript中應該象調用一個不帶參數的JScript函數一樣調用它如用foo()調用VBScript Sub foo過程
三數據共享
在某些情形下混合運用VBScript和JScript函數是非常有用的但在不同語言腳本之間共享數據也可能很有用實現這種共享的方法很簡單不管使用的是什麼語言只要是在頁面級聲明的變量就可以任意引用
對象的使用方法也相似可以任意選用合適的語言讀取修改屬性或調用對象的方法當然給定對象的屬性和方法是由創建該對象實例的語言所定義的正如上例VBScript的過程調用
當從JScript中調用一個不帶參數的VBScript對象的方法時其調用方法也遵從JScript的調用規則反之亦然
四數組管理
數組共享問題稍微復雜一點雖然數組也象其它變量一樣可以在不同語言腳本之間共享但必須注意兼容方面的問題
VBScript數組在JScript下可以用VBScript的符號引用即用myArray()引用數組元素而不是JScript的數組元素引用符號myArray[]此外還可以使用一個特殊的JScript對象——VBArray對象將VBScript數組轉換為JScript數組下面的代碼從VBScript數組myVBArray創建JScript數組myJSArray
var Temp = new VBArray(myVBArray)
var myJSArray
myJSArray = TemptoArray()
上述代碼首先創建一個臨時的VBArray對象然後使用它的toArray()方法將自己轉換為JScript數組此後就可以象普通JScript數組一樣使用myJSArray如myJSArray[]但應當注意的是toArray()方法將把一個多維的VBArray轉換為一維的JScript數組
從VBScript中引用JScript數組更為復雜雖然在VBScript中我們可以直接訪問JScript數組相關的方法和屬性但沒有直接訪問JScript數組的單個元素的方法也就是說我們可以在VBScript腳本中讀取JScript數組的長度屬性如下所示
x = myJSArraylength
但無法直接讀取該數組的單個元素下面的VBScript代碼是不正確的
x = myJSArray()
解決該問題的一個可行的方法是執行一個轉換過程如下面的代碼所示此處假定VBScript是缺省的腳本語言
< %
Dim Temp
Dim myVBArray
Temp = myJSArrayjoin( )
myVBArray = Split(Temp )
%>
此處的JScript join()方法將數組myJSArray元素轉換到一個以逗號為分割符的字符串VBScript Split()函數將字符串轉換為VBScript數組注意這裡我們是在VBScript環境下調用JScript的join方法依照此例我們可以通過自定義VBScript函數來模擬JScript的VBArray對象的toArray()方法以實現JScript數組到VBScript數組的轉換
五小結
在同一個ASP工程內靈活選用不同腳本語言具有許多優點這些腳本之間的交互能力更為開發者集成不同語言所提供的內置函數和其它功能帶來了更多的機會同時也使得實現既可用於VBScript也可用於JScript環境的通用腳本庫成為可能
From:http://tw.wingwit.com/Article/program/net/201311/13849.html