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

标签 javascript iis asp-classic vbscript

我知道I can call top-level functions defined in JS from VBScript ,反之亦然,像这样:

<%@ 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>

...并且 includedModule.js 中定义的函数在 VBScript 中可用。

但假设我有一个使用原型(prototype) 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。或者其他的东西。

那我该怎么做呢?

之所以有值(value):Javascript 中有可用的 OO 库,从 VBScript 中使用它们会很有趣。

最佳答案

我不知道如何避免 VBScript 不能直接调用 Javascript“构造函数”函数的问题。我处理它的方法是简单地定义一个 shim:一个 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>

关于javascript - 如何在 ASP-Classic 或 WSH 环境中使用来自 VBScript 的 Javascript OO 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10080262/

相关文章:

asp.net - 两个 ASP 表达式代码之间的空格被删除

javascript - React-router 和 iframe,浏览器历史记录

javascript - 如何替换单个正则表达式中的多个值?

Javascript 图像在 Firefox 和 Chrome 中不显示

javascript - 使 jQuery Popbox 在其父级之外可见

ruby-on-rails - 防止 jRuby on Rails 应用程序与 Puma/IIS 在设定的时间后进入休眠状态

c# - 无法启动 IIS Express

信息系统 |阻止特定于特定内部 IP 地址的页面特定 URL

asp-classic - ASP经典代码有人可以解释这段代码的作用吗?

php - 经典 ASP 中的各种 HMAC_SHA256 函数给出不同的结果