我在我的WSH-JScripts中使用Date.prototype
来做一些日期计算。我想在WSH-VBS中包含这些功能。基本上,在VBS脚本中混合使用JS和VBS代码以及包含JS文件可以在WSF文件中使用。
但是我不能让扩展的Date
对象在VBS中工作。我想这是因为VBS中没有等效的Date
对象,并且在VBS中以另一种方式处理日期。
在VBS中重新实现我的日期功能似乎是一个坏主意(只要我不确定没有其他办法)。可以在VBS脚本中编写简单的JS包装器,这些包装器可以转发到Date
对象函数。
如果还有其他想法,我会很高兴看到它。
答案 0 :(得分: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>
答案 1 :(得分: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()”子函数。