參考
異種指令碼的互相調用
如果需要在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(2)引用數組元素而不是JScript的數組元素引用符號myArray[2]。此外,還可以使用一個特殊的JScript對象——VBArray對象將VBScript數群組轉換為JScript數組。下面的代碼從VBScript數組myVBArray建立JScript數組myJSArray:
var Temp = new VBArray(myVBArray)
var myJSArray
myJSArray = Temp.toArray()
上述代碼首先建立一個臨時的VBArray對象,然後使用它的toArray()方法將自己轉換為JScript數組。此後就可以象普通JScript數組一樣使用myJSArray,如myJSArray[1]。但應當注意的是,toArray()方法將把一個多維的VBArray轉換為一維的JScript數組。
從VBScript中引用JScript數組更為複雜。雖然在VBScript中我們可以直接存取JScript數組相關的方法和屬性,但沒有直接存取JScript數組的單個元素的方法。也就是說,我們可以在VBScript指令碼中讀取JScript數組的長度屬性,如下所示:
x = myJSArray.length
但無法直接讀取該數組的單個元素,下面的VBScript代碼是不正確的:
x = myJSArray(3)
解決該問題的一個可行的方法是執行一個轉換過程,如下面的代碼所示,此處假定VBScript是預設的指令碼語言:
<%
Dim Temp
Dim myVBArray
Temp = myJSArray.join(", ")
myVBArray = Split(Temp, ", ")
%>
此處的JScript join()方法將數組myJSArray元素轉換到一個以逗號為分割符的字串,VBScript Split()函數將字串轉換為VBScript數組。注意這裡我們是在VBScript環境下調用JScript的join方法。依照此例,我們可以通過自訂VBScript函數來類比JScript的VBArray對象的toArray()方法以實現JScript數組到VBScript數組的轉換。
五、小結
在同一個ASP工程內靈活選用不同指令碼語言具有許多優點,這些指令碼之間的互動能力更為開發人員整合不同語言所提供的內建函數和其它功能帶來了更多的機會,同時也使得實現既可用於VBScript也可用於JScript環境的泛型指令碼庫成為可能。