台灣最大程式設計社群網站
線上人數
1582
 
會員總數:246224
討論主題:189786
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> ASP 中 VB, JS 可以互相呼叫FUNCTION
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ASP 中 VB, JS 可以互相呼叫FUNCTION
價值 : 0 QP  點閱數:2236 回應數:0
樓主

站務人員 站長
門外漢
0 1580
542 9
發送站內信

捐贈 VP 給 站務人員
轉貼自大陸某網站(忘了網址了)

--------------------------------

ASP頁面內VBScript和JScript

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使用者定義函數(在這堥洏垝BScript內建函數),然後在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陣列。注意這塈畯怓O在VBScript環境下使用JScript的join方法。依照此例,我們可以通過自定義VBScript函數來模擬JScript的VBArray對象的toArray()方法以實現JScript陣列到VBScript陣列的轉換。

五、小結

在同一個ASP工程內靈活選用不同腳本語言具有許多優點,這些腳本之間的交互能力更為開發者集成不同語言所提供的內建函數和其他功能帶來了更多的機會,同時也使得實現既可用於VBScript也可用於JScript環境的通用腳本庫成為可能。
本篇文章發表於2001-12-04 00:00
目前尚無任何回覆
   

回覆
如要回應,請先登入.