Вопрос по asp-classic, vbscript, javascript – Как я могу использовать классы Javascript OO из VBScript, в среде ASP-Classic или WSH?

1

я знаюЯ могу вызывать функции верхнего уровня, определенные в JS из VBScriptи наоборот, вот так:

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

Я также могу включить JS в модули VBScript, например:

<code><%@ language="VBScript" %>

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

<script language="VBScript" runat="server">

    ....
</script>
</code>

... и функции, определенные в includeModule.js, доступны в VBScript.

Но предположим, что у меня есть класс Javascript, определенный с использованием прототипа OO, например:

<code>(function() {

  MyObj = function() {
    this.foo = ...
    ...
  };

  MyObj.prototype.method1 = function() { .. };
  MyObj.prototype.method2 = function() { .. };
}());
</code>

Как я могу использовать этот объект (он же тип или класс) из VBScript?

Ванильный подход ...

<code>Dim foo
Set foo = New MyObj
</code>

...не работает.

Ни один не делает

<code>Dim foo
foo = MyObj()
</code>

... потому что, по-видимомуthis не определяется при вызове функции JS из VBScript. Или что-то.

Так как я могу это сделать?

Причина этого важна: в Javascript доступны библиотеки OO, которые было бы интересно использовать из VBScript.

Ваш Ответ

1   ответ
3

как избежать проблемы, заключающейся в том, что 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>

Похожие вопросы