如何在 ASP-Classic 或 WSH 环境中使用 VBScript 中的 Javascript OO 类

How can I use Javascript OO classes from VBScript, in an ASP-Classic or WSH environment?

本文关键字:VBScript 中的 Javascript OO ASP-Classic 环境 WSH      更新时间:2023-09-26

我知道我可以从VBScript调用JS中定义的顶级函数,反之亦然,如下所示:

<%@ language="Chakra" %>
<script language='JavaScript' runat='server'>
  function jsFunction1() {
      for (var i=0;i<10;i++) Response.Write(i+"<br>");
      vbFunction2();
  }
</script>
<script language='VBScript' runat='server'>
  Sub vbFunction1 ()
      Response.Write("VB Hello <br/>" & VbCrLf)
      jsFunction1()
  End Sub
  Sub vbFunction2 ()
      Response.Write("VB Goodbye <br/>" & VbCrLf)
  End Sub
</script>

<script language="JavaScript" runat="server">
  vbFunction1();
</script>

我还可以将JS包含在VBScript模块中,如下所示:

<%@ language="VBScript" %>
<script language="Javascript" runat="server" src="includedModule.js"></script>
<script language="VBScript" runat="server">
    ....
</script>

。在 includeModule 中定义的函数.js在 VBScript 中可用。

但是假设我有一个使用原型OO定义的Javascript类,如下所示:

(function() {
  MyObj = function() {
    this.foo = ...
    ...
  };
  MyObj.prototype.method1 = function() { .. };
  MyObj.prototype.method2 = function() { .. };
}());

如何使用 VBScript 中的该对象(也称为类型或类)?

香草方法...

Dim foo
Set foo = New MyObj

。不起作用。

也没有

Dim foo
foo = MyObj()

。因为显然在调用 JS 函数时没有定义this来自 VBScript。什么的。

那我该怎么做呢?

这是有价值的:Javascript中有可用的OO库,从VBScript使用会很有趣。

我不知道

如何避免VBScript不能直接调用Javascript"构造函数"的问题。 我处理它的方式是简单地定义一个填充程序:Javascript中的一个顶级函数,它从Javascript中调用构造函数并返回引用。

所以:

<script language='javascript' runat='server'>(function() {  
  MyObj = function() {  
    this.foo = ...  
    ...  
  };  
  MyObj.prototype.method1 = function() { .. };  
  MyObj.prototype.method2 = function() { .. };  
  // define a shim that is accessible to vbscript
  Shim = {construct: function() { return new MyObj(); } };
}());  
</script>
<script language='vbscript' runat='server'>
  Dim foo
  Set foo = Shim.construct()
   ...
</script>