我知道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/