1

Date.prototype在我的 WSH-JScripts 中使用了一些日期计算。我也想在 WSH-VBS 中包含这些功能。基本上,混合 JS 和 VBS 代码并在 VBS 脚本中包含 JS 文件在 WSF 文件中工作。

但我无法让扩展Date对象在 VBS 中工作。我想这是因为 VBS 中没有等效Date对象,而日期在 VBS 中以另一种方式处理。

在 VBS 中重新实现我的日期函数似乎是一个坏主意(只要我不确定是否有其他方法)。可以在 VBS 脚本中编写简单的 JS 包装器,以将其转发到Date对象函数。

如果有任何其他想法,我会很高兴看到它。

4

2 回答 2

1

以下脚本在 Windows 7 上为我工作。我认为关键是有一对函数可以在 JScriptDate对象和 VBScriptDate类型之间进行转换。在我的示例中,这JSDateFromVB是一个非常粗糙的函数,可以从 VBScript 转换Date为 JScript Date

<job id="test">
    <script language="JScript">
        if (typeof Date.prototype.prettyPrint === 'undefined')
        {
            Date.prototype.prettyPrint = function () {
                return this.getFullYear() + '-' +
                    (this.getMonth()+1) + '-' +
                    this.getDate();
            }
        }

        function makeDate(vbDate) {
            return new Date(vbDate);
        }
    </script>
    <script language="VBScript">
        Dim d
        d = DateSerial(2000, 11, 30)

        Dim js_d
        Set js_d = JSDateFromVB(d)

        WScript.Echo js_d.prettyPrint()

        Function JSDateFromVB(pDate)
            Set JSDateFromVB = makeDate(pDate)
        End Function
    </script>
</job>
于 2010-12-23T09:14:10.713 回答
0

您在 JavaScript 中对 Date 对象的扩展在 VBScript 中不起作用的原因是 WSH 系统没有注意到对任何 JavaScript 对象原型的扩展。原型定义只存在于您编写的 JavaScript 代码中——一旦您尝试从 VBScript 中访问它,它就不存在,因为它从未导入到该名称空间中。

但是,您可以破解它 - 通过在普通 JavaScript 函数中定义原型扩展(这是导入的两个项目之一 - 我相信另一个是全局变量)。然而,原型扩展只存在于 JavaScript Date 对象上——您不能扩展 VBScript 对象。

function blargh() {
  Date.prototype.help = function() {...};
  ...
}

...然后在您的 VBScript 中,您将调用“blargh()”,这将修改 JavaScript 中的 Date 对象,以便任何返回到 VBScript 的 Date 对象都可以使用“help()”子函数。

于 2011-08-03T12:18:31.937 回答