vbscript和javascript互相调⽤⽅法
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(2)引⽤数组元素⽽不是JScript的数组元素引⽤符号
myArray[2]。此外,还可以使⽤⼀个特殊的JScript对象——VBArray对象将VBScript数组转换为JScript数组。下⾯的代码从VBScript 数组myVBArray创建JScript数组myJSArray:
宁静以致远 var Temp = new VBArray(myVBArray)
2022给老师的新年祝福 var myJSArray
myJSArray = Array()
上述代码⾸先创建⼀个临时的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环境的通⽤脚本库成为可能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论