2010-12-22 20 views
1

我在我的WSH-JScripts中使用Date.prototype来做一些日期计算。我想将这些功能也包含在WSH-VBS中。基本上,混合JS和VBS代码,并将JS文件包含在VBS脚本中可以在WSF文件中使用。WSH:如何在VBS中使用扩展的JScript Date对象?

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

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

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

回答

1

以下脚本适用于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> 
+0

这看起来不错。我的想法是有一个简单的JS函数转发到Date对象函数。您的解决方案只是使VBS中的(扩展的)JS Date对象可用。访问像getFullYear()这样的内置日期函数也可以。比我的想法少得多的工作。非常感谢你! – nokul 2010-12-23 09:34:55

0

您在JavaScript中对Date对象的扩展无法在VBScript中工作的原因是WSH系统没有注意到任何JavaScript对象原型的扩展。原型定义只存在于您编写的JavaScript代码中 - 只要您尝试从VBScript中访问它,它就不存在,因为它从未导入该名称空间。然而,你可以通过在一个普通的JavaScript函数(这是获得导入的两个项目之一 - 我相信另一个是全局变量)中定义原型扩展来破解它。原型扩展只会在JavaScript Date对象上存在 - 但是不能扩展VBScript对象。

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

...然后在您的VBScript,则称之为“blargh()”将要修改JavaScript中的Date对象,以便任何Date对象返回VBScript的将有“帮助()”子功能可用。

相关问题