WSH:如何在VBS中使用扩展的JScript Date对象?

我在我的WSH-JScripts中使用
Date.prototype
来做一些日期计算。我想在WSH-VBS中包含这些功能。基本上,在VBS脚本中混合使用JS和VBS代码以及包含JS文件可以在WSF文件中使用。 但我不能让扩展的
Date
对象在VBS中工作。我想这是因为VBS中没有等效的
Date
对象,而日期在VBS中以另一种方式处理。 在VBS中重新实现我的日期功能似乎是一个坏主意(只要我不确定没有其他办法)。可以在VBS脚本中编写简单的JS包装器,这些包装器可以转发到
Date
对象函数。 如果还有其他想法,我会很高兴看到它。     
已邀请:
以下脚本在Windows 7上适用于我。我认为关键是有一对函数可以在JScript
Date
对象和VBScript
Date
类型之间进行转换。在我的例子中,
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>
    
您在JavaScript中对Date对象的扩展在VBScript中不起作用的原因是WSH系统没有注意到任何JavaScript对象原型的扩展。原型定义仅存在于您编写的JavaScript代码中 - 只要您尝试从VBScript中访问它,它就不存在,因为它从未导入到该命名空间。 但是你可以通过在正常的JavaScript函数中定义原型扩展(这是导入的两个项目之一 - 我相信另一个是全局变量)来破解它。原型扩展只存在于JavaScript Date对象上 - 但是您无法扩展VBScript对象。
function blargh() {
  Date.prototype.help = function() {...};
  ...
}
...然后在你的VBScript中,你会调用“blargh()”来修改JavaScript中的Date对象,这样任何返回给VBScript的Date对象都会有“help()”子函数。     

要回复问题请先登录注册