1

次のように、JS で定義されたトップレベルの関数を 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 で使用できます。

しかし、次のように、プロトタイプの 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()

... thisJS 関数が VBScript から呼び出されたときに明らかに定義されていないためです。か何か。

どうすればそれができますか?

これが価値がある理由: Javascript で利用できる OO ライブラリがあり、VBScript から使用すると興味深いでしょう。

4

1 に答える 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>
于 2012-04-09T21:46:54.957 に答える